Android ListView spinner场景使用举例介绍

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值