如何借助SimpleAdapter和Spinner实现下拉列表

时间:2023-01-29 10:13:39

        这两天研究了一下利用SimpleAdapter和Spinner实现下拉列表的功能,现将代码与大家共享:

        代码1—添加名为“SelectActivity.java”的文件:

package com.ghj.activity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.SimpleAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class SelectActivity extends Activity {

	private Spinner spinner;
	private SimpleAdapter simpleAdapter;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.select);
		spinner = (Spinner) findViewById(R.id.spinner);
		List<Map<String, String>> specialtyList = getSpinnerData();
		simpleAdapter = new SimpleAdapter(this, specialtyList, R.layout.select_item, new String[]{"id","name"}, new int[]{R.id.value, R.id.lable});
		spinner.setAdapter(simpleAdapter);
		
		setDefaultSpinner(specialtyList, "yingyu");//设置默认选中项
		
		spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
			@Override
			public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
				String lable = ((TextView) SelectActivity.this.findViewById(R.id.lable)).getText().toString();
				String value = ((TextView) SelectActivity.this.findViewById(R.id.value)).getText().toString();
				Toast.makeText(SelectActivity.this, lable + "→" + value, Toast.LENGTH_LONG).show();
			}

			@Override
			public void onNothingSelected(AdapterView<?> parent) {				
			}
		});
	}
	
	/**
	 * 设置下拉列表默认选中项
	 * 
	 * @author 高焕杰
	 */
	private void setDefaultSpinner(List<Map<String, String>> mapList, String id){
		for (int i = 0; i < mapList.size(); i++) {
			Map<String, String> map = mapList.get(i);
			if(id.equals(map.get("id"))){
				spinner.setSelection(i,true);
				break;
			}
		}
	}
	
	private List<Map<String, String>> getSpinnerData(){
		List<Map<String, String>> specialtyList = new ArrayList<Map<String, String>>();

		Map<String, String> map1 = new HashMap<String, String>();
		map1.put("id", "yuwen");
		map1.put("name", "语文");
		specialtyList.add(map1);

		Map<String, String> map2 = new HashMap<String, String>();
		map2.put("id", "shuxue");
		map2.put("name", "数学");
		specialtyList.add(map2);

		Map<String, String> map3 = new HashMap<String, String>();
		map3.put("id", "yingyu");
		map3.put("name", "英语");
		specialtyList.add(map3);

		return specialtyList;
	}
}

        代码2—添加名为“select_item_selector.xml”的文件:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true">
        <shape>
            <solid android:color="#60FFA500" />
        </shape>
    </item>
    
    <item android:state_focused="true">
        <shape>
            <solid android:color="#60FFA500" />
        </shape>
	</item>
</selector>

        代码3—添加名为“select.xml”的文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <Spinner
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

        代码4—添加名为“select_item.xml”的文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/select_item_selector"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/lable"
        android:layout_width="fill_parent"
        android:layout_height="45dp"
        android:gravity="center_vertical"
        android:paddingLeft="12dp" />

    <TextView
        android:id="@+id/value"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:visibility="gone" />

</LinearLayout>

        代码5—修改文件名为“styles.xml”的文件:

<resources>

    <!--
        Base application theme, dependent on API level. This theme is replaced
        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
    -->
    <style name="AppBaseTheme" parent="android:Theme.Light">
        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.
        -->
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="android:Theme.Light">
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    </style>

</resources>
        【 0分下载示例