`

ListView显示不同布局(模拟ExpandListView)

 
阅读更多
public class MainActivity extends ListActivity {

	private MyCustomAdapter mAdapter;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		mAdapter = new MyCustomAdapter();
		for (int i = 1; i < 50; i++) {
			mAdapter.addItem("item " + i);
			if (i % 4 == 0) {
				mAdapter.addSeparatorItem("separator " + i);
			}
		}
		setListAdapter(mAdapter);
	}

	private class MyCustomAdapter extends BaseAdapter {

		private static final int TYPE_ITEM = 0;
		private static final int TYPE_SEPARATOR = 1;
		private static final int TYPE_MAX_COUNT = TYPE_SEPARATOR + 1;

		private ArrayList<String> mData = new ArrayList<String>();
		private LayoutInflater mInflater;

		private TreeSet<Integer> mSeparatorsSet = new TreeSet<Integer>();

		public MyCustomAdapter() {
			mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		}

		public void addItem(final String item) {
			mData.add(item);
			notifyDataSetChanged();
		}

		public void addSeparatorItem(final String item) {
			mData.add(item);
			// save separator position
			mSeparatorsSet.add(mData.size() - 1);
			notifyDataSetChanged();
		}

		@Override
		public int getItemViewType(int position) {
			return mSeparatorsSet.contains(position) ? TYPE_SEPARATOR
					: TYPE_ITEM;
		}

		@Override
		public int getViewTypeCount() {
			return TYPE_MAX_COUNT;
		}

		@Override
		public int getCount() {
			return mData.size();
		}

		@Override
		public String getItem(int position) {
			return mData.get(position);
		}

		@Override
		public long getItemId(int position) {
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			ViewHolder holder = null;
			int type = getItemViewType(position);
			System.out.println("getView " + position + " " + convertView
					+ " type = " + type);
			if (convertView == null) {
				holder = new ViewHolder();
				switch (type) {
				case TYPE_ITEM:
					convertView = mInflater.inflate(R.layout.item1, null);
					holder.textView = (TextView) convertView
							.findViewById(R.id.text);
					break;
				case TYPE_SEPARATOR:
					convertView = mInflater.inflate(R.layout.item2, null);
					holder.textView = (TextView) convertView
							.findViewById(R.id.textSeparator);
					break;
				}
				convertView.setTag(holder);
			} else {
				holder = (ViewHolder) convertView.getTag();
			}
			holder.textView.setText(mData.get(position));
			return convertView;
		}

	}

	public static class ViewHolder {
		public TextView textView;
	}
}


上面部分代码设计到的布局:

item1.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_height="wrap_content"
	android:layout_width="fill_parent">
	<TextView
		android:id="@+id/text"
		android:layout_height="50dp"
		android:gravity="center_vertical"
		android:text="text"
		android:visibility="visible"
		android:layout_width="fill_parent"
		android:textColor="#FF000000"
		android:background="#FFFFFFFF" />
</LinearLayout>


item2.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_height="wrap_content"
	android:layout_width="fill_parent">
	<TextView
		android:id="@+id/textSeparator"
		android:layout_height="wrap_content"
		android:gravity="center"
		android:text="text"
		android:visibility="visible"
		android:layout_width="fill_parent"
		android:textColor="#FFFFFFFF"
		android:background="#FFFF0000" />
</LinearLayout>


最近忙着做"美丽约",所以一直没时间写blog,希望大家能帮忙用下提下建议。如果有问题可以给我留言;),在此谢过了。
分享到:
评论

相关推荐

    ListView加载不同布局.zip

    本教程将详细解释如何在ListView中实现加载不同布局,即“图片文字”与“纯文字”布局交替显示。 首先,我们需要了解ListView的工作原理。ListView通过Adapter类来绑定数据和视图。Adapter就像一个桥梁,连接数据源...

    listview加载不同布局

    标题“listview加载不同布局”指的是在同一个ListView中,根据数据的不同类型或者不同状态,动态加载不同的布局文件,以实现更丰富的显示效果。这样的功能通常应用于新闻列表、电商商品列表等场景,每个条目可能需要...

    Android ListView加载不同布局.解决异常ClassCastException

    然而,在实现ListView时,我们可能会遇到一个问题,即加载不同布局导致的`ClassCastException`异常。这个异常通常出现在尝试将一个对象强制转换为非兼容类型时,对于ListView,可能是由于在适配器中错误地处理了视图...

    ListView下显示不同的布局视图

    对于描述中的“三个集合的数据”,这意味着ListView可能需要根据不同的数据集来显示不同布局。例如,一个集合可能只包含文本,另一个可能包含图片和文本,而第三个可能包含更复杂的结构,如头像、标题、描述等。每个...

    android ListView 网格布局

    本文将深入探讨如何在Android中实现一个基于ArrayAdapter的网格布局ListView。 首先,我们要了解ListView的基本结构。ListView是由多个列表项(List Item)组成的,每个列表项通常对应一个View。在Android中,我们...

    Android ListView adapter不同布局

    然而,有时我们需要在同一个ListView中显示具有不同布局的项,这通常涉及到自定义Adapter的使用。"Android ListView adapter不同布局"这个主题就是关于如何在ListView中实现这样的功能。 首先,我们了解ListView的...

    WPF的ListView控件自定义布局用法实例

    自定义布局允许开发者根据需求灵活设计ListView显示的内容和样式。本实例将深入讲解如何在WPF中自定义ListView控件的布局。 首先,自定义布局主要涉及到两部分:ControlTemplate和DataTemplate。ControlTemplate...

    listview 加载不同item 布局

    写的demo只有第一条item布局不一样,剩下的item布局都一样;主要用于实现在listview加上headview时又有下拉...所有就把原本listview要加的headview布局加到listview的item布局中;这样在加下拉刷新控件就不会起冲突了;

    listView item不同布局demo

    总结来说,"listView item不同布局demo"是一个展示如何在ListView中实现多类型item布局的实例,通过自定义Adapter和复写关键方法,我们可以灵活地控制ListView每一项的显示样式,从而满足各种复杂的需求。...

    android listView中显示不同的布局

    通过以上步骤,我们就实现了在ListView中显示不同布局的功能。在实际项目中,可能会有更多的布局类型,或者更复杂的数据绑定逻辑,但基本思路是一致的。在" DifferentListViewItemDemo "中,你可以找到具体的代码...

    Android listview动态加载不同布局

    "Android listview动态加载不同布局"这一主题,主要涉及如何在ListView中根据不同的数据类型或者状态显示不同的视图(View)布局,提升用户体验并优化性能。 首先,要实现ListView动态加载不同布局,我们需要理解...

    ListView中显示不同的视图布局实现重用Demo

    4. `getViewTypeCount()`:返回布局的类型数量,例如,如果有两种不同布局,则返回2。 5. `getItemViewType(int position)`:根据数据项的属性返回对应的视图类型。 6. `getView(int position, View convertView, ...

    ListView加载多种布局

    然而,有些情况下我们不仅需要展示单一类型的条目,还可能需要在同一个ListView中混合显示多种布局。本教程将详细讲解如何在ListView中实现这种功能。 首先,我们需要理解ListView的工作原理。ListView通过Adapter...

    Android ListView使用不同对象加载不同布局

    在某些场景下,我们可能需要为ListView的每个Item加载不同的布局,以实现更复杂的显示效果。本篇将详细讲解如何在ListView中根据不同的对象加载不同的布局。 首先,我们要明白ListView的工作原理。ListView通过...

    android 在listview的item中显示不同的布局信息

    本篇文章将深入探讨如何在ListView的Item中实现不同布局的显示。 首先,理解ListView的基本原理是至关重要的。ListView通过Adapter来连接数据源和视图,Adapter负责创建并填充每个Item。默认情况下,ListView的所有...

    安卓listview相关相关-ExpandListView滑动到顶端时固定.zip

    在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据,而ExpandListView是ListView的一个扩展,它支持子项的展开和折叠,使得显示更丰富的信息。这个压缩包"安卓listview相关相关-ExpandListView...

    ListView Item多布局的实现

    在这个例子中,`ItemData`是一个自定义的Java类,它包含表示不同布局类型的数据字段,以及一个`getType()`方法返回当前数据项的布局类型。 最后,我们在Activity或Fragment中设置这个自定义Adapter到ListView上: ...

    ListView加载多个布局

    在这里,我们可以根据数据项的类型返回不同布局。首先,需要一个字段来存储数据项的类型,例如`int itemType`。然后,在`getView()`中,我们根据`itemType`来决定加载哪个布局。可以使用`if...else`或`switch`语句来...

    listview实现悬浮布局

    标题“listview实现悬浮布局”指的是如何让某个视图在ListView滚动时保持固定在屏幕顶部,这通常用于实现类似天气预报、导航栏等需要常显的功能。以下将详细介绍如何在ListView中实现这种悬浮布局。 首先,我们可以...

    Android用listview显示数据库中的数据

    ListView是一种可滚动的视图,可以显示多个项目,适合于显示列表数据。 6. **创建数据适配器**:ListView的工作原理是通过数据适配器(如`BaseAdapter`或`ArrayAdapter`)将数据绑定到视图。你需要创建一个自定义的...

Global site tag (gtag.js) - Google Analytics