zoukankan      html  css  js  c++  java
  • Android开发手记(10) 下拉菜单Spinner

    1、自定义Spinner

      首先,定义Spinner要显示的项目列表/res/values/arrays.xml

    1 <?xml version="1.0" encoding="utf-8"?>
    2 <resources>
    3     <string-array name="citys">
    4         <item>南京</item>
    5         <item>徐州</item>
    6         <item>常州</item>
    7     </string-array>
    8 </resources>

      然后,定义一个ArrayAdapter<String>并绑定到上面定义的项目列表。

    1 ArrayAdapter<String> adapter = ArrayAdapter.createFromResource(
    2                 this, R.array.citys, android.R.layout.simple_spinner_item);
    3 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

      其中,createFromResource()的函数原型为:

    createFromResource(Context context, int textArrayResId, int textViewResId);

      然后,将adapter绑定到spinner:

    1  spinner.setAdapter(adapter);

      最后,为spinner添加一个setOnItemSelectedListener即可:

     1     spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
     2             @Override
     3             public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
     4                 Toast.makeText(MainActivity.this, "position" + i + spinner.getSelectedItem().toString(),
     5                             Toast.LENGTH_SHORT).show();
     6                 }
     7 
     8             @Override
     9             public void onNothingSelected(AdapterView<?> adapterView) {
    10                 Toast.makeText(MainActivity.this, "unselected", Toast.LENGTH_SHORT);
    11             }
    12         });

      完整代码为:

     1 public class MainActivity extends AppCompatActivity {
     2 
     3     private Spinner spinner;
     4 
     5     @Override
     6     protected void onCreate(Bundle savedInstanceState) {
     7         super.onCreate(savedInstanceState);
     8         setContentView(R.layout.activity_main);
     9 
    10         spinner = (Spinner) findViewById(R.id.spinner);
    11 
    12         ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
    13                 this, R.array.citys, android.R.layout.simple_spinner_item);
    14         adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    15         spinner.setAdapter(adapter);
    16 
    17         spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    18             @Override
    19             public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
    20                 Toast.makeText(MainActivity.this, "position" + i + spinner.getSelectedItem().toString(),
    21                             Toast.LENGTH_SHORT).show();
    22                 }
    23 
    24             @Override
    25             public void onNothingSelected(AdapterView<?> adapterView) {
    26                 Toast.makeText(MainActivity.this, "unselected", Toast.LENGTH_SHORT);
    27             }
    28         });
    29 
    30     }
    31 
    32 }
    MainActivity.java

    2、动态改变Spinner

      想动态改变Spinner的内容,需要将Spinner的内容绑定到一个Adapter上。通过增加ArrayAdapter的内容来动态改变Spinner的内容。

    1         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item);
    2         adapter.add("南京");
    3         adapter.add("徐州");
    4         adapter.add("常州");
    5         spinner.setAdapter(adapter);

      (1)增加一个项

      通过在EditText输入需要增加的内容,之后单击一个Button来增加Spinner。为Button添加以下事件即可。

     1 btnAdd.setOnClickListener(new View.OnClickListener() {
     2             @Override
     3             public void onClick(View view) {
     4                 String city = editText.getText().toString();
     5                 for (int i = 0; i < adapter.getCount(); i++) {
     6                     if (city.equals(adapter.getItem(i))) {
     7                         Toast.makeText(MainActivity.this, "此城市已存在", Toast.LENGTH_SHORT).show();
     8                         return;
     9                     }
    10                 }
    11                 if (!city.trim().equals("")) {
    12                     adapter.add(city);
    13                     int pos = adapter.getPosition(city);
    14                     spinner.setSelection(pos);
    15                     editText.setText("");
    16                 }
    17             }
    18         });

      (2)删除一个项

      通过在Spinner选中需要删除的内容,之后单击一个Button来删除Spinner。为Button添加以下事件即可。

     1 btnDel.setOnClickListener(new View.OnClickListener() {
     2             @Override
     3             public void onClick(View view) {
     4                 if (spinner.getSelectedItem() != null) {
     5                     adapter.remove(spinner.getSelectedItem().toString());
     6                     editText.setText("");
     7                     if (adapter.getCount() == 0) {
     8                         Toast.makeText(MainActivity.this, "列表为空", Toast.LENGTH_SHORT).show();
     9                     }
    10                 }
    11             }
    12         });

    3、完整代码如下:

     1 import android.support.v7.app.AppCompatActivity;
     2 import android.os.Bundle;
     3 import android.view.View;
     4 import android.widget.AdapterView;
     5 import android.widget.ArrayAdapter;
     6 import android.widget.Button;
     7 import android.widget.EditText;
     8 import android.widget.Spinner;
     9 import android.widget.Toast;
    10 
    11 public class MainActivity extends AppCompatActivity {
    12 
    13     private Spinner spinner;
    14     private EditText editText;
    15     private Button btnAdd;
    16     private Button btnDel;
    17     private ArrayAdapter<String> adapter;
    18 
    19     @Override
    20     protected void onCreate(Bundle savedInstanceState) {
    21         super.onCreate(savedInstanceState);
    22         setContentView(R.layout.activity_main);
    23 
    24         btnAdd = (Button) findViewById(R.id.btnAdd);
    25         btnDel = (Button) findViewById(R.id.btnDel);
    26         editText = (EditText) findViewById(R.id.editText);
    27         spinner = (Spinner) findViewById(R.id.spinner);
    28 
    29         adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item);
    30         adapter.add("南京");
    31         adapter.add("徐州");
    32         adapter.add("常州");
    33         spinner.setAdapter(adapter);
    34 
    35         btnAdd.setOnClickListener(new View.OnClickListener() {
    36             @Override
    37             public void onClick(View view) {
    38                 String city = editText.getText().toString();
    39                 for (int i = 0; i < adapter.getCount(); i++) {
    40                     if (city.equals(adapter.getItem(i))) {
    41                         Toast.makeText(MainActivity.this, "此城市已存在", Toast.LENGTH_SHORT).show();
    42                         return;
    43                     }
    44                 }
    45                 if (!city.trim().equals("")) {
    46                     adapter.add(city);
    47                     int pos = adapter.getPosition(city);
    48                     spinner.setSelection(pos);
    49                     editText.setText("");
    50                 }
    51             }
    52         });
    53         btnDel.setOnClickListener(new View.OnClickListener() {
    54             @Override
    55             public void onClick(View view) {
    56                 if (spinner.getSelectedItem() != null) {
    57                     adapter.remove(spinner.getSelectedItem().toString());
    58                     editText.setText("");
    59                     if (adapter.getCount() == 0) {
    60                         Toast.makeText(MainActivity.this, "列表为空", Toast.LENGTH_SHORT).show();
    61                     }
    62                 }
    63             }
    64         });
    65         spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    66             @Override
    67             public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
    68                 editText.setText(adapter.getItem(i));
    69             }
    70 
    71             @Override
    72             public void onNothingSelected(AdapterView<?> adapterView) {
    73 
    74             }
    75         });
    76 
    77     }
    78 
    79 }

      

  • 相关阅读:
    [CareerCup] 8.1 Implement Blackjack 实现21点纸牌
    [LeetCode] H-Index 求H指数
    [CareerCup] 7.7 The Number with Only Prime Factors 只有质数因子的数字
    [CareerCup] 7.6 The Line Passes the Most Number of Points 经过最多点的直线
    Ionic实战一:Ionic仿照微信项目
    ionic3+angular4+cordova 项目实例
    Android 给EditText添加下划线
    浅谈移动优先的跨终端Web 解决方案
    Android环信即时通讯集成坑爹 注册报错208解决
    Android自定义控件 -- 带边框的TextView
  • 原文地址:https://www.cnblogs.com/doodle777/p/Spinner_Usage.html
Copyright © 2011-2022 走看看