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 }