`

ListView在应用开发中较为常用的做法

阅读更多

首先声明下,这是本人自己使用的做法,可能并不适合每个人,但是具有参考意义,分享给大家,不足的地方希望有人能提出来。

 

ListView在做应用的时候是经常被使用到的。一般开发应用程序的时候,我们会先做界面。这个时候,遇到ListView,我们会先模拟一些数据,而且,每个ListView通常都有类型的行为,比如,ListView的每个Item的点击效果,Item之间的横线,等等,而通常我们不会去使用自带的list item 的布局,而是自己去写一个布局,然后在自定义的Adapter中去inflate它。在多个地方都使用到这些特性,那么我们就可以把这些特性放到父类中来处理。而对于界面中共同的元素我们会放到style中去处理。

 

先看MainAdapter.java:

public class MainAdapter extends BaseCompatableAdapter<Map<String, String>> {

	public MainAdapter(Context context, List<Map<String, String>> data) {
		super(context, data);
		
	}

	class ViewHolder {

		ImageView ivPic;
		TextView tvName;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		final ViewHolder viewHolder;
		if (convertView == null) {

			convertView = super.layoutInflater
					.inflate(R.layout.list_item, null);
			viewHolder = new ViewHolder();
			viewHolder.ivPic = (ImageView) convertView
					.findViewById(R.id.iv_pic);
			viewHolder.tvName = (TextView) convertView
					.findViewById(R.id.tv_name);

			convertView.setTag(viewHolder);
		} else {

			viewHolder = (ViewHolder) convertView.getTag();
		}
		
		//TODO 接下去对数据进行绑定...

		return convertView;
	}

}

 这里面做的事情非常简单,因为我把部分代码移到了父类BaseCompatableAdapter中,

下面看父类

BaseCompatableAdapter.java:

public abstract class BaseCompatableAdapter<T> extends BaseAdapter {

	 
	protected Context context;
	private List<T> data;
	protected LayoutInflater layoutInflater;

	public BaseCompatableAdapter(Context context, List<T> data) {
		this.context = context;
		this.data = data;
		layoutInflater = (LayoutInflater) context
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		if (data == null)
			return 0;
		return data.size();
	}

	@Override
	public T getItem(int position) {
		// TODO Auto-generated method stub
		return data.get(position);
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

}

 覆写过BaseAdapter的同学应该可以知道,实际上就是把BaseAdapter的部分方法在这里面覆写了。以后你的其他的Adapter都继承自这个Adapter,那么可以省下不少的代码量。

 

最后看主界面:

MainActivity.java:

public class MainActivity extends Activity {

	private ListView lvData;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		lvData = (ListView)findViewById(R.id.lv_data);
		
		List<Map<String, String>> dataList = new ArrayList<Map<String, String>>();
		
		Map<String, String> map;
		for(int i = 0; i < 50; i++){//模拟数据量,当并没有加入真实的数据源
			
			map = new HashMap<String, String>();
			dataList.add(map);
		}
		
		lvData.setAdapter(new MainAdapter(this, dataList));
	}

}

 

上面是关于代码中如何较为简洁的处理ListView和Adapter,下面则是设置ListView的界面

 

用一个style来设置每个ListView公用的地方,如下:

res/values/styles.xml:

<resources>

    <style name="listview_style" parent="@android:style/Widget.ListView">
        <!-- <item name="android:listSelector">@drawable/list_item_bg_selecter</item> -->
        <item name="android:divider">@drawable/line</item><!-- @drawable/list_item_line -->
        <item name="android:cacheColorHint">@null</item>
    </style>

</resources>

 这里面设置了divider,即Item之间的横线,cacheColor设置为null,listSelector设置list item点击下去的效果。因为我将selector写到了list item里面去了,所以这里就注释掉了,实际上这里最好可以写入一个默认的selector,这样所有的listview的item都默认有一个selector样式!在一些情况下,比如List item中嵌套着一个ViewStub,那么这个时候你设置的listSelector会失效,这个时候,只能够在List item中设置背景selector,而且要注意,如果是ViewStub这种情况的话,不能将list item最外层的layout设置背景selector,而是要在除了ViewStub,在剩下的那个控件里面设置selector,即点击会显示或隐藏ViewStub的那个控件。

 

你的listview可以这样引用style:

<ListView
        android:id="@+id/lv_data"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        style="@style/listview_style"
         />

 

 

下面我们看看list Item

res/layout/list_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/list_item_bg_selecter"
     >
    
    <ImageView 
        android:id="@+id/iv_pic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:src="@drawable/ic_launcher"
        android:layout_margin="5dip"
        />

    <TextView 
        android:id="@+id/tv_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginLeft="10dip"
        android:layout_toRightOf="@+id/iv_pic"
        android:text="张三"
        />
    
</RelativeLayout>

 

注意在这里面我设置了android:background="@drawable/list_item_bg_selecter"这是关键,这里决定了ListView的每个Item的点击效果:但是这里也可以没有selector,如果没有的话,就会调用style中定义的selector,如果style中你没有设置,那么就会调用默认的selector(按下去橘黄色的那种效果)。

 

res/drawable/list_item_bg_selector.xml:

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

    <item android:drawable="@drawable/list_item_bg_sel" android:state_pressed="true"/>
    <item android:drawable="@drawable/list_item_bg_sel" android:state_focused="true"/>
    <item android:drawable="@drawable/list_item_bg_sel" android:state_selected="true"/>
    <item android:drawable="@drawable/list_item_bg_nor"/>

</selector>

 

这个selector中用到的图片可以是普通图片,也可以是自己画的图片,比如:

res/drawable/list_item_bg_sel.xml:

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

    <solid android:color="#efece7" />

</shape>

 

list_item_bg_nor.xml也是一样,只不过设置不同的颜色。

 

当然横线你也可以自己画,比如:

res/drawable/line.xml:

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

    <stroke android:width="1dp" />

    <size android:height="3dp" />

    <solid android:color="#efece7" />

</shape>

 

下面附上效果图和项目结构图:

 

 

 

 

 

 

项目地址:

https://github.com/michaelye/ListViewStandardDemo

 

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 82.7 KB
  • 大小: 42.4 KB
0
0
分享到:
评论

相关推荐

    ListView控件应用实例

    在Android应用设计中,ListView的使用能够帮助开发者有效地展示大量数据,并提供良好的用户交互体验。本实例将深入探讨ListView的各种视图模式以及如何自定义其内容。 1. 大图标视图(Large Icon View):在这种...

    ListView 安卓应用市场

    在本项目“ListView 安卓应用市场”中,我们将深入探讨如何使用ListView来模拟一个类似真实应用市场中的界面,展示一系列的应用图标、标题和简介。 首先,我们需要了解ListView的基本结构。ListView由多个列表项...

    C# listview控件应用

    在C#编程中,ListView控件是一个非常常用且功能强大的组件,主要用于展示数据集合,它在Windows Forms和WPF环境中都有应用。这个控件可以显示数据列表,支持多种视图模式,如图标、详细信息、小图标、列表和报告等,...

    ListView 的定制开发实例

    在Android应用开发中,ListView是一种常用的视图组件,它允许用户滚动显示大量数据项的列表。ListView的定制开发是Android开发中的重要技能,因为它能够帮助开发者实现更丰富的用户体验和更高效的数据显示。本教程将...

    ListView中的几种位置关系和LayoutAnimation在listview中的应用

    在本文中,我们将深入探讨ListView中的几种位置关系以及如何在ListView中应用LayoutAnimation来增强用户体验。 首先,理解ListView的位置关系对于自定义适配器和处理点击事件至关重要。在ListView中,每个可视项都...

    景点介绍(ListView控件应用)

    **事件处理**:在ListView中,事件处理主要涉及到OnClickListener或OnItemClickListener。设置监听器后,当用户点击列表项时,会触发相应的回调方法,我们可以在这里编写逻辑,比如播放景点的介绍音频、显示弹出窗口...

    ListView简单应用

    这只是一个基础的ListView应用,实际开发中,你可能需要处理更复杂的情况,如加载更多数据、异步加载数据、自定义复杂列表项等。理解并熟练掌握ListView的使用,对于Android开发者来说是非常必要的。

    ListView案例

    在Android应用开发中,ListView通常用于显示各种类型的数据集合,如联系人列表、邮件列表等。本案例主要围绕ListView的使用进行深入探讨。 首先,理解ListView的基本结构。ListView由多个列表项(List Item)组成,...

    Android移动应用开发之ListView的简单使用2

    在Android移动应用开发中,ListView是一个非常重要的组件,它用于展示大量的数据集合,通常以列表的形式显示。在本教程中,我们将深入探讨ListView的简单使用,以实现标题、图片和网址的列表展示,并且在点击列表项...

    listview控件应用实例

    ListView控件是Windows应用程序开发中常见的一种用户界面元素,它允许程序以列表形式展示数据,支持多种视图模式,如小图标、大图标、列表、详细信息等。在这个"listview控件应用实例"中,我们可以看到一位国外高手...

    android listview 详解 开发指南

    适配器的工作原理是将数据源中的每一项数据转化为一个View,然后添加到ListView中。例如,ArrayAdapter可以绑定一个数组或ArrayList,通过重写getView()方法来自定义每个列表项的显示样式。在SimpleAdapter中,我们...

    listview的简单应用

    在Android开发中,ListView的使用极其常见,尤其适用于展示长列表,如联系人列表、应用列表等。本教程将详细介绍ListView的基本应用,包括数据添加和点击事件处理。 一、ListView的基本结构 ListView由多个...

    android的ListView点击item使item展开的做法

    在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。在实际应用中,我们经常需要实现点击ListView的某一项(item)时,该item能够展开显示更多的内容,例如子列表或者详细信息。这个功能可以通过...

    Android 中ListView的应用

    在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据列表,通常用于实现像通讯录、消息列表等效果。ListView的高效利用是优化用户体验的关键,因为它能够动态加载数据,只渲染屏幕可见的部分,从而...

    ListView开发实例 ListView示例 ListView案例 小例子 源码

    在Android应用开发中,ListView通常被用来显示各种类型的数据,如联系人、消息、菜单选项等。本教程将深入讲解ListView的开发实例,通过示例和案例,帮助你理解和掌握ListView的使用。 首先,我们要了解ListView的...

    ListView中HeadView的使用

    在Android开发中,ListView是一种常用的控件,用于展示大量...通过以上步骤,开发者能够灵活地在ListView中添加和定制HeadView,满足各种应用需求。在实际开发中,合理运用HeadView可以提高应用的可操作性和美观度。

    下拉列表ListView的应用实例

    在Android开发中,ListView是一种非常常见的控件,用于展示大量数据的列表形式,通常用于实现下拉列表的效果。本教程将深入探讨ListView的应用实例,帮助开发者掌握如何在实际项目中有效地利用这一组件。 首先,...

    Android中ListView的应用介绍

    在Android应用开发中,ListView是不可或缺的一个组件,它主要用于展示数据集合,并且能根据数据的数量自动调整自身高度,提供良好的滚动体验。以下是对ListView及其相关知识点的详细解释: 1. **ListView组件**: ...

    android listview局部刷新和模拟应用下载

    本示例中的"android listview局部刷新和模拟应用下载"正是探讨了如何在ListView中实现这一功能,并结合应用下载进度更新的场景进行演示。 首先,局部刷新通常通过Adapter来实现。Adapter是连接ListView和数据源的...

    ListView控件显示数据库数据的C#源代码_ListView_c#listview控件_数据开发_

    在.NET Framework中,ListView控件是Windows Forms应用程序中常用的一个组件,它允许开发者以列表的形式展示数据,可以用于展示数据库中的信息。这个“ListView控件显示数据库数据的C#源代码”实例,主要展示了如何...

Global site tag (gtag.js) - Google Analytics