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; } }
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
- Android ListView spinner场景使用举例介绍
- Android BaseAdapter(Spinner,ListView,GridView)的使用
- Android之旅八 ListView、TabHost、Spinner控件详细介绍
- Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!
- Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!
- Android 中万能的 BaseAdapter(Spinner,ListView,GridView) 的使用!
- Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!
- Android 中万能的 BaseAdapter(Spinner,ListView,GridView) 的使用!
- Android中AutoCompleteTextView,Spinner和ListView的使用
- Android BaseAdapter在GridView,ListView,Spinner中的使用
- zookeeper 实际使用场景举例
- ListView中Spinner的使用
- Android ListView/GridView onItemClick函数参数说明及使用举例
- Android Spinner的使用
- android spinner的使用
- Android Spinner 的使用
- android spinner的使用
- Android spinner 的使用
- lua through c access to CPU and MEM
- Java Thread
- 设计模式-行为设计模式:解释器模式 Interpreter
- MFC窗口客户区全屏显示以及PICTURE控件全屏显示
- 【WPF】XAML引入资源和在C#代码中动态添加样式
- Android ListView spinner场景使用举例介绍
- MYSQL数据库之运行状态下自动备份数据库
- C语言define 与typedef区别
- zookeeper安装部署主要流程(以zookeeper-3.4.6为例)
- Codeforce 742D(01背包)
- Unity工程判断当前录音权限是否被禁
- React JS 组件间沟通的一些方法
- .vtt 字幕无法加载
- java事务配置多个切点