[置顶] Android开发适配器系列:Spinner绑定ArrayAdapter适配器

1、什么是Spinner
Spinners 提供了一个快速的方式从一个集合中选择一个选项,默认情况Spinner显示当前选中的值,我们也可以通过spinner.setSelection(position);语句来设置Spinner选中的值。点击Spinner会弹出一个显示可供选择的下拉列表菜单,用户可从其中选择一个满足用户需求的选项。
2、如何为Spinner提供数据源
一般将数据源提供个适配器,接着讲适配器绑定Spinner控件的方式来实现为Spinner控件提供数据源。接下来我们将使用实例,来实现使用两种不同的数据源提供给ArrayAdapter并绑定Spinner适配器。
3、Spinner下列菜单使用的布局
Spinner下列菜单可以使用系统自带的布局,也可根据需求使用自定义布局。
// 将可选内容与ArrayAdapter连接起来
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, countries);
// 设置下拉列表的风格
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
4、运行效果:
[置顶] Android开发适配器系列:Spinner绑定ArrayAdapter适配器_第1张图片   [置顶] Android开发适配器系列:Spinner绑定ArrayAdapter适配器_第2张图片   [置顶] Android开发适配器系列:Spinner绑定ArrayAdapter适配器_第3张图片
5、实例源码:
strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">SpinnerDemo</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string-array name="plantes">
        <item>NOKIA</item>  
        <item>MOTO</item>  
        <item>HTC</item>  
        <item>LG</item>  
        <item>其他</item>  
    </string-array>
</resources>
main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/spinnerText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/spinnerText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Spinner
        android:id="@+id/spinner2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <EditText 
         android:id="@+id/editText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        />
    <Button 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:onClick="add"
        android:text="添加城市"/>
        <Button 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" 
        android:onClick="delete"
        android:text="删除城市"/>

</LinearLayout>
MainActivity.java
package com.andieguo.spinnerdemo;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

	private static final String[] m = { "北京", "上海", "重庆", "广州", "深圳" };
	private List<String> countries;
	private TextView textview;
	private EditText editText;
	private Spinner spinner;
	private TextView textview2;
	private Spinner spinner2;
	private ArrayAdapter<String> adapter;
	private ArrayAdapter adapter2;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		countries = new ArrayList<String>();
		for (int i = 0; i < m.length; i++) {// 将数组转化成list集合,方便adapter.add()操作
			countries.add(m[i]);
		}
		// =============使用List集合作为数据源
		// ===================================================//
		spinner = (Spinner) findViewById(R.id.spinner);
		textview = (TextView) findViewById(R.id.spinnerText);
		editText = (EditText) findViewById(R.id.editText);

		// 将可选内容与ArrayAdapter连接起来
		adapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_spinner_item, countries);
		// 设置下拉列表的风格
		adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		// 将adapter 添加到spinner中
		spinner.setAdapter(adapter);
		// 添加事件Spinner事件监听
		spinner.setOnItemSelectedListener(new OnItemSelectedListener() {

			@Override
			public void onItemSelected(AdapterView<?> parent, View view,
					int position, long id) {
				textview.setText("你的城市是:" + adapter.getItem(position));
			}

			@Override
			public void onNothingSelected(AdapterView<?> parent) {
				// TODO Auto-generated method stub
			}
		});
		// 设置默认值
		spinner.setVisibility(View.VISIBLE);

		// =============使用XML作为数据源
		// ===================================================//
		spinner2 = (Spinner) findViewById(R.id.spinner2);
		textview2 = (TextView) findViewById(R.id.spinnerText2);
		// 将可选内容与ArrayAdapter连接起来
		adapter2 = ArrayAdapter.createFromResource(this, R.array.plantes,
				android.R.layout.simple_spinner_item);
		// 设置下拉列表的风格
		adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		// 将adapter 添加到spinner中
		spinner2.setAdapter(adapter2);
		// 添加事件Spinner事件监听
		spinner2.setOnItemSelectedListener(new OnItemSelectedListener() {

			@Override
			public void onItemSelected(AdapterView<?> parent, View view,
					int position, long id) {
				textview2.setText("你的手机型号是:" + adapter2.getItem(position));
			}

			@Override
			public void onNothingSelected(AdapterView<?> parent) {
				// TODO Auto-generated method stub
			}
		});
		// 设置默认值
		spinner2.setVisibility(View.VISIBLE);

	}

	public void add(View v) {
		String newCountry = editText.getText().toString();
		// 先比较添加的值是否存在,不存在才可以添加
		for (int i = 0; i < adapter.getCount(); i++) {
			if (newCountry.equals(adapter.getItem(i))) {
				Toast.makeText(this, "该城市已存在", 1).show();
				editText.setText("");
				return;
			}
		}
		if (!newCountry.equals("")) {
			adapter.add(newCountry);
			int position = adapter.getPosition(newCountry);
			spinner.setSelection(position);
			editText.setText("");
			Toast.makeText(this, "添加城市成功", 1).show();
		}
	}

	public void delete(View v) {
		if(spinner.getSelectedItem()!= null){
			//删除spinner值
			adapter.remove(spinner.getSelectedItem().toString());
			textview.setText("你的城市是:" +"");
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

你可能感兴趣的:(Android开发,适配器)