ListView是android常用的组件之一,经常会在滑动侧边栏,商品列表等。使用ListView一般有以下5种方式
- 使用资源数组
- 使用ArrayAdapter
- 使用SimpleAdapter
- 继承BaseAdapter
- 继承ListActivity
一.使用资源数组
这种方式非常简单,但是显示比较单一,只适合简单的业务需求。
使用方法:
1.在资源文件中定义数组
<resources> <array name="main_array"> <item>基于数组</item> <item>ArrayAdapter 方式</item> <item>SimpleAdapter 方式</item> <item>BaseAdapter 方式</item> </array> </resources>
2.在布局文件中创建ListView标签,并使用entries属性引入数组
<ListView android:id="@+id/main_listView" android:layout_width="match_parent" android:layout_height="wrap_content" android:entries="@array/main_array"> </ListView>
3.绑定点击事件
mainListView = (ListView) findViewById(R.id.main_listView); final String[] array = getResources().getStringArray(R.array.main_array); mainListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {//设置点击触发方法 @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { switch (position){ case 0 : Toast.makeText(getApplication(),"当前页面便是使用数组生成的ListView",Toast.LENGTH_SHORT).show(); break; case 1 : startActivity(new Intent(getApplicationContext(), ArrayAdapterTest.class));//打开新的activity break; case 2 : startActivity(new Intent(getApplicationContext(), SimpleAdapterTest.class));//打开新的activity break; case 3 : startActivity(new Intent(getApplicationContext(), BaseAdapterTest.class));//打开新的activity break; } } });
二.使用ArrayAdapter
用户需定义item显示布局
使用方法:
1.创建ListView标签
<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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.xinxin.adaptertest.ArrayAdapterTest"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/array_adapter_h1" android:layout_margin="10dp"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="绿色分割线" android:layout_margin="10dp" /> <!-- 显示普通列表 --> <ListView android:id="@+id/arrayAdapterTestListView" android:layout_width="match_parent" android:layout_height="wrap_content" android:divider="#0f0" android:dividerHeight="2px" android:headerDividersEnabled="false" android:layout_margin="10dp" > </ListView> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="红色分割线" android:layout_margin="10dp" /> <!-- 显示带checkbox的列表 --> <ListView android:id="@+id/arrayAdapterTestListView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:divider="#ff3f1d" android:dividerHeight="2px" android:headerDividersEnabled="false" android:layout_margin="10dp" > </ListView> </LinearLayout>
2.创建显示item布局
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="10dp" android:textSize="25sp"> </TextView>
3.activity代码
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_array_adapter_test); listView = (ListView) findViewById(R.id.arrayAdapterTestListView); listView1 = (ListView) findViewById(R.id.arrayAdapterTestListView1); List<String> list = new ArrayList<String>(); for(int i=0; i<5; i++){ list.add("green:item"+i); } //创建ArrayAdapter实例 ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, R.layout.array_adapter_test_item, list); //为ListView添加adapter listView.setAdapter(arrayAdapter); //为每个元素绑定点击方法 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { System.out.println(position); TextView tv = (TextView) view; Toast.makeText(getApplication(), "您点击了:" + tv.getText().toString(), Toast.LENGTH_SHORT).show(); } }); //为每个元素绑定选择方法 listView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { TextView tv = (TextView) view; Toast.makeText(getApplication(), "您选择了:"+tv.getText().toString(), Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); list = new ArrayList<String>(); for(int i=0; i<5; i++){ list.add("red:item"+i); } arrayAdapter = new ArrayAdapter<String>(this, R.layout.select_dialog_multichoice_material, list);//设置多选列表,使用android自带布局 listView1.setAdapter(arrayAdapter); listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {//处理checkbox勾选 CheckedTextView checkedTextView = (CheckedTextView) view; if(checkedTextView.isChecked()){ checkedTextView.setChecked(false); }else{ checkedTextView.setChecked(true); } } }); }
三.使用SimpleAdapter
评价最多的一句话“简单而不简单”,使用SimpleAdapter可以创建自定义的显示方式
使用方法:
1.定义布局,只需在主布局中放入一个简单的ListView
<ListView android:id="@+id/simpleAdapterListView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp"> </ListView>
2.定义item显示布局,注意logoImage,name, desc这三个控件,在第三步中会使用到。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:layout_width="match_parent" android:orientation="horizontal" android:layout_margin="10dp"> <ImageView android:id="@+id/logoImage" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_margin="10dp" /> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_margin="10dp"/> <TextView android:id="@+id/desc" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_margin="10dp"/> </LinearLayout>
3.activity代码
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_simple_adapter); listView = (ListView) findViewById(R.id.simpleAdapterListView); int[] logoIds = new int[]{R.drawable.p1, R.drawable.p2}; String[] names = new String[]{"元素1", "元素2"}; String[] descs = new String[]{"这是测试元素1","这是测试元素2"}; List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); for (int i=0; i<2; i++){ Map<String, Object> map = new HashMap<String, Object>(); map.put("logoImage", logoIds[i]); map.put("name", names[i]); map.put("desc", descs[i]); list.add(map); } //实例化SimpleAdapter SimpleAdapter simpleAdapter = new SimpleAdapter(this, list, R.layout.activity_simple_adapter_item , new String[]{"logoImage","name","desc"}, new int[]{R.id.logoImage, R.id.name, R.id.desc}); listView.setAdapter(simpleAdapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { LinearLayout line = (LinearLayout) view; TextView textView = (TextView) line.getChildAt(1); Toast.makeText(getApplication(), "您点击了:"+textView.getText().toString(), Toast.LENGTH_SHORT).show(); } }); }
四.BaseAdapter
需要继承BaseAdapter,并实现抽象方法,用户可以高度控制。
使用方法:
1.在主布局中创建ListView
<ListView android:id="@+id/baseAdapterListView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" ></ListView>
2.编写activity代码
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_base_adapter_test); listView = (ListView) findViewById(R.id.baseAdapterListView); BaseAdapter baseAdapter = new BaseAdapter() {//继承BaseAdapter,并实现抽象方法 @Override public int getCount() {//元素个数 return 10; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { LinearLayout linearLayout = new LinearLayout(BaseAdapterTest.this);//创建线性布局 linearLayout.setOrientation(LinearLayout.HORIZONTAL); ImageView imageView = new ImageView(BaseAdapterTest.this);//创建图片布局 imageView.setImageResource(R.drawable.p1); linearLayout.addView(imageView); TextView textView = new TextView(BaseAdapterTest.this);//常见TextView布局 textView.setText("item"+position); linearLayout.addView(textView); return linearLayout; } }; listView.setAdapter(baseAdapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {//处理点击事件 @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { LinearLayout linearLayout = (LinearLayout) view; TextView textView = (TextView) linearLayout.getChildAt(1); Toast.makeText(getApplication(), "您点击了:"+textView.getText(), Toast.LENGTH_SHORT).show(); } }); }
5. 继承ListActivity类似于ArrayAdapter,这里便不再介绍。
最后将效果图发上来:
相关推荐
import android.widget.AdapterView; import android.widget.EditText; import android.widget.ListView; import android.widget.SimpleCursorAdapter; import android.widget.Toast; public class myMenu extends ...
listview子项(Item)的取值存在很多问题,常常会因为方法不对而取到空值,或者直接抛空指针异常。对于这些问题,也许你曾和我一样困惑,不过,我相信,你看完我的例子之后可以茅塞顿开。为了照顾新手、菜鸟,本人...
今天遇到这么个需求,需要在运行时动态添加ListView的item,看起来很简单,实际操作过程中却遇到了麻烦,下面揭秘在ListView等AdapterView上动态添加删除项的陷阱
ListView也是Android中比较难以使用的控件,这节内容就将详细解读ListView的用法。 一个ListView通常有两个职责。 (1)将数据填充到布局。 (2)处理用户的选择点击等操作。 第一点很好理解,ListView就是实现...
ListView如何实现简单列表,供大家参考,具体内容如下 效果图: 啥也没干的ListView张这样: fry.Activity01 package fry;...import android.widget.AdapterView.OnItemClickListener; import andr
我们在使用ListView的时候,一般都会为ListView添加一个响应事件android.widget.AdapterView.OnItemClickListener。对OnItemClickListener的position和id参数,我相信有些人在这上面走了些弯路。 在使用listview的...
常用Adapter配合ListView使用实例
我们在使用ListView的时候,一般都会为ListView添加一个响应事件android.widget.AdapterView.OnItemClickListener。本文主要在于对OnItemClickListener的position和id参数做详细的解释,我相信有些人在这上面走了些...
一个ListView通常有两个职责。 (1)将数据填充到布局。 ... 第一点很好理解,...适配器是一个连接数据和AdapterView(ListView就是一个典型的AdapterView,后面还会学习其他的)的桥梁,通过它能有效地实现数据与A
It supports AdapterView(ListView,GridView,etc) and RecyclerView. Dependency compile 'com.barryzhang:temptyview:0.0.1' Usage I. Initialize initialize some custom attributes —— this step is not ...
BGAAdapterViewAdapter 和 BGAViewHolderHelper 用于简化 AdapterView 的子类(如 ListView、GridView)的适配器的编写 BGARecyclerViewAdapter 和 BGAViewHolderHelper 用于简化 RecyclerView 的适配器的编写,...
Android 实现ListView的点击变色的实例 我做了一个音乐播放器,其中用ListView显示歌曲列表,当我点击某一首歌时,希望这首歌所在的item的背景颜色改变,以突出显示所选择的歌曲。 首先我想到的是在...
本文介绍了android的ListView点击item使item展开的做法的实现代码,分享给大家,具体如下: 效果图: 原理是点击item的时候,重新measure list的各个item的高度 list.setOnItemClickListener(new ...
6.4 结合使用适配器和AdapterView 6.4.1 基本的列表控件:ListView 6.4.2 GridView控件 6.4.3 Spinner控件 6.4.4 Gallery控件 6.4.5 创建自定义适配器 6.4.6 Android中的其他控件 6.5 样式和...
本文实例讲述了Android编程记录ListView标记行状态的方法。分享给大家供大家参考,具体如下: 小Demo无什么特别之处,最特别的就是尽量少用notifyDataSetChanged,开销太大了,当然使用是会省不少工的,不过有时候...
ListView 是 Android 系统为我们提供的一种列表显示的一种控件。 使用它可以用来显示我们常见的列表形式,继承自抽象类 AdapterView。 常用适配器介绍 ArrayAdapter:简单、易用的 Adapter,用于将数组数据作为数据...
本文实例讲述了Android编程实现分页加载ListView功能。分享给大家供大家参考,具体如下: package eoe.listview; import android.app.Activity;...import android.widget.AdapterView; import android.widget.Lis
ListView,2. Adapter接口及实现类,3. ListActivity,4. GridView。疯兄重点要提到的是第二个仁兄Adapter接口及实现类。这个Adapter可谓神通广大,变幻莫测,他在兵马未动之前,提供各种粮草弹药,具体怎么提供,...