Android ListView spinner场景使用举例介绍

来源:互联网 发布:ds note for mac 编辑:程序博客网 时间:2024/06/15 05:58

Spinner会在很多的场景下面使用,比如选择城市,学校等,Listview的使用场景我也不用多说了,作为一个android菜鸟,我经常使用Listview。后来做项目中的一个功能,在我这个菜鸟来看,使用Spinner和Listview的结合效果还不错,但是貌似这个不是想象中的那么简单,因为Listview中的每个item都要有对应一个Spinner,这里面就出现了两个问题:

1、如何把每个Spinner中的数据放到ListView对应的item中,因为他俩都需要adapter传值

2、Spinner选中了之后,提交数据,如何把Spinner中选择的数据提交



由于这个ListView是需要用adapter传数据进去,一般使用的都是Map向里面传值,Map初始化的时候已经确定了value的类型,Spinner传值需要List,所以如果要让ListView中显示Spinner就要自定义adapter。

我的工程中Text是我自己定义的一个类,title顾名思义标题,content表示内容其实就是存放Spinner数据的数组,id是代表这个Spinner中被选中的数据的数组下标。

package com.alex.listview_spinner;public class Text {       private String title;      private String[] content;      private int id;       public int getId() {          return id;      }         public void setId(int id) {          this.id = id;      }      public String getTitle() {          return title;      }         public void setTitle(String title) {          this.title = title;      }         public String[] getContent() {          return content;      }         public void setContent(String[] content) {          this.content = content;      }  }


TextAdapter.java代码如下:
package com.alex.listview_spinner;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemSelectedListener;import android.widget.ArrayAdapter;import android.widget.BaseAdapter;import android.widget.Spinner;import android.widget.TextView;public class TextAdapter extends BaseAdapter{          private List<Text> texts;      private Integer resource;      private Context context;      private LayoutInflater inflater;            public TextAdapter(Context context, List<Text> text,int resource){          this.texts=text;          this.resource=resource;          this.context=context;          inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);      }            public int getCount() {          // TODO Auto-generated method stub          return texts.size();      }        public Object getItem(int arg0) {          // TODO Auto-generated method stub          return texts.get(arg0);      }        public long getItemId(int arg0) {          // TODO Auto-generated method stub          return arg0;      }        public View getView(int arg0, View arg1, ViewGroup arg2) {          // TODO Auto-generated method stub          if(arg1==null){              arg1=inflater.inflate(resource, null);          }          final Text text = texts.get(arg0);          TextView titleView=(TextView)arg1.findViewById(R.id.title);          final Spinner contentView=(Spinner)arg1.findViewById(R.id.content);          contentView.setTag("");          contentView.setOnItemSelectedListener(new OnItemSelectedListener() {              public void onItemSelected(AdapterView<?> arg0, View arg1,                      int arg2, long arg3) {                  // TODO Auto-generated method stub                  text.setId(arg2);//每次Spinner中的值改变,Text类中的id就要改变              }              public void onNothingSelected(AdapterView<?> arg0) {                  // TODO Auto-generated method stub              }          });                    titleView.setText(text.getTitle());          ArrayAdapter<String> adapter = new ArrayAdapter<String>(context,android.R.layout.simple_list_item_single_choice,text.getContent());          contentView.setAdapter(adapter);          return arg1;      }    }
MainActivity.java代码如下:
package com.alex.listview_spinner;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ListAdapter;import android.widget.ListView;import android.widget.Toast;public class MainActivity extends Activity {/** Called when the activity is first created. */private ListView listView;private Button button;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);show();button = (Button) findViewById(R.id.button1);button.setOnClickListener(new OnClickListener() {public void onClick(View v) {ListAdapter listAdapter = listView.getAdapter();for (int i = 0; i < listAdapter.getCount(); i++) {Text text = (Text) listAdapter.getItem(i);Toast.makeText(MainActivity.this,text.getTitle() + " "+ text.getContent()[text.getId()], 0).show();}}});}private void show() {List<Text> texts = new ArrayList<Text>();for (int i = 0; i < 10; i++) {// 自定义的Text类存数据Text text = new Text();text.setTitle(String.valueOf(i));// 标题数据String[] temp = new String[10];for (int j = 0; j < 10; j++) {// Spinner数据temp[j] = String.valueOf(j);text.setId(0);// Spinner的默认选择项text.setContent(temp);texts.add(text);}TextAdapter textAdapter = new TextAdapter(MainActivity.this, texts,R.layout.main_item);// 向自定义的Adapter中传值listView = (ListView) findViewById(R.id.mylist);listView.setAdapter(textAdapter);// 传值到ListView中}}}

activity_main.xml代码如下:
<?xml version="1.0" encoding="utf-8"?><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"    tools:context="${relativePackage}.${activityClass}" >    <ListView        android:id="@+id/mylist"        android:layout_width="match_parent"        android:layout_height="500dp" >    </ListView>    <Button        android:id="@+id/button1"        android:layout_width="match_parent"        android:gravity="center"        android:textColor="@android:color/holo_green_light"        android:layout_height="wrap_content"        android:text="提交" /></LinearLayout>

main_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="wrap_content"      android:orientation="horizontal" >        <TextView           android:id="@+id/title"          android:layout_width="wrap_content"          android:layout_height="match_parent"/>            <Spinner           android:id="@+id/content"          android:layout_width="wrap_content"          android:layout_height="match_parent"/>    </LinearLayout>

AndroidManifest.xml文件代码:
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.alex.listview_spinner"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="14"        android:targetSdkVersion="25" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name=".MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>
运行效果:




写到这里就已经实现了所要的基本功能了,如果还需要特殊定制自己修改即可。有什么疑问可以给我留言评论
1 0
原创粉丝点击