我们有时候会遇到这么一个情况。就是我在一个ListView里面需要显示的东西其实是有种类之分的。比如我要分冬天,夏天,秋天,春天,然后在这每个季节下面再去加载各自的条目数据。还有,比如我们的通讯录,我们需要按A,B,C这样的字母顺序分类然后显示。这个怎么实现呢?
下面我们不用ExpandableListView,而是只用ListView来实现这一显示效果。
MainActivity.java
-
packagecom.xzq.listviewadapter;
-
-
importandroid.app.Activity;
-
importandroid.os.Bundle;
-
importandroid.view.Window;
-
importandroid.widget.ListView;
-
-
publicclassMainActivityextendsActivity{
-
-
privateString[]string={"A","B","C","D","E","F","G","H","I",
-
"J","K","L","M","N","O","P","Q","R","S","T","U","V",
-
"W","X","Y","Z"};
-
-
-
@Override
-
publicvoidonCreate(BundlesavedInstanceState){
-
super.onCreate(savedInstanceState);
-
requestWindowFeature(Window.FEATURE_NO_TITLE);
-
setContentView(R.layout.main);
-
-
ListViewlistview=(ListView)findViewById(R.id.listview);
-
MyCustomAdapteradapter=newMyCustomAdapter(this);
-
-
intsize=string.length;
-
for(inti=0;i<size;i++){
-
adapter.addSeparatorItem(string[i]);
-
for(intk=0;k<5;k++){
-
adapter.addItem("item"+k);
-
}
-
}
-
listview.setAdapter(adapter);
-
}
-
}
MyCustomAdapter.java
-
packagecom.xzq.listviewadapter;
-
-
importjava.util.ArrayList;
-
importjava.util.TreeSet;
-
-
importandroid.content.Context;
-
importandroid.view.LayoutInflater;
-
importandroid.view.View;
-
importandroid.view.ViewGroup;
-
importandroid.widget.BaseAdapter;
-
importandroid.widget.TextView;
-
-
publicclassMyCustomAdapterextendsBaseAdapter{
-
-
privatestaticfinalintTYPE_ITEM=0;
-
privatestaticfinalintTYPE_SEPARATOR=1;
-
privatestaticfinalintTYPE_MAX_COUNT=TYPE_SEPARATOR+1;
-
privateArrayList<String>data=newArrayList<String>();
-
privateLayoutInflaterinflater;
-
privateTreeSet<Integer>set=newTreeSet<Integer>();
-
-
publicMyCustomAdapter(Contextcontext){
-
inflater=LayoutInflater.from(context);
-
}
-
-
publicvoidaddItem(Stringitem){
-
data.add(item);
-
}
-
-
publicvoidaddSeparatorItem(Stringitem){
-
data.add(item);
-
set.add(data.size()-1);
-
}
-
-
publicintgetItemViewType(intposition){
-
returnset.contains(position)?TYPE_SEPARATOR:TYPE_ITEM;
-
}
-
-
@Override
-
publicintgetViewTypeCount(){
-
returnTYPE_MAX_COUNT;
-
}
-
-
@Override
-
publicintgetCount(){
-
returndata.size();
-
}
-
-
@Override
-
publicObjectgetItem(intposition){
-
returndata.get(position);
-
}
-
-
@Override
-
publiclonggetItemId(intposition){
-
returnposition;
-
}
-
-
@Override
-
publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
-
ViewHolderholder=null;
-
inttype=getItemViewType(position);
-
if(convertView==null){
-
holder=newViewHolder();
-
switch(type){
-
caseTYPE_ITEM:
-
convertView=inflater.inflate(R.layout.item1,null);
-
holder.textView=(TextView)convertView
-
.findViewById(R.id.item1);
-
break;
-
caseTYPE_SEPARATOR:
-
convertView=inflater.inflate(R.layout.item2,null);
-
holder.textView=(TextView)convertView
-
.findViewById(R.id.item2);
-
break;
-
}
-
convertView.setTag(holder);
-
}else{
-
holder=(ViewHolder)convertView.getTag();
-
}
-
holder.textView.setText(data.get(position));
-
returnconvertView;
-
}
-
-
publicstaticclassViewHolder{
-
publicTextViewtextView;
-
}
-
}
main.xml
-
<?xmlversion="1.0"encoding="utf-8"?>
-
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
-
android:layout_width="fill_parent"
-
android:layout_height="fill_parent"
-
android:background="#ffffff"
-
android:orientation="vertical">
-
-
<ListView
-
android:id="@+id/listview"
-
android:layout_width="fill_parent"
-
android:layout_height="wrap_content"
-
android:text="@string/hello"/>
-
-
</LinearLayout>
item1.xml
-
<?xmlversion="1.0"encoding="utf-8"?>
-
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
-
android:layout_width="fill_parent"
-
android:layout_height="fill_parent"
-
android:background="#ffffff"
-
android:orientation="vertical">
-
-
<TextView
-
android:id="@+id/item1"
-
android:layout_width="fill_parent"
-
android:layout_height="30dip"
-
android:gravity="center_vertical"/>
-
-
</LinearLayout>
item2.xml
-
<?xmlversion="1.0"encoding="utf-8"?>
-
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
-
android:layout_width="fill_parent"
-
android:layout_height="fill_parent"
-
android:orientation="vertical">
-
-
<TextView
-
android:id="@+id/item2"
-
android:layout_width="fill_parent"
-
android:layout_height="30dip"
-
android:background="#3c4857"
-
android:gravity="center_vertical"/>
-
-
</LinearLayout>
分享到:
相关推荐
android--ListView实现带标题栏效果(附源码)
ExpandableListView (实现ListView嵌套ListView的效果)
Android中ListView实现表格效果
android studio实现listview的增加,左滑删除 listview以表格样式实现
通过listview和fragment实现仿京东的分类。
android listview嵌套listview实现折叠列表
android listview,ExpandableListView实现单选,多选,全选,edittext实现批量输入
Android中使用ListView实现汽泡短信聊天 效果及实现过程可参照小魏博客:http://blog.csdn.net/xiaowei_cqu/article/details/7045543
利用ListView嵌套ExpandableListView实现三级菜单
ListView的adapter有一个getItemViewType()和getViewTypeCount()这么两个方法,挺好用的,主要是用来练习这两个方法的。
通过一个例子实现ListView列表视图并且点击不同的项进入不同的界面,需要的可以看看
Android开发中 ListView浮动头部标题栏,实现简单可用
雨松MOMO带你做软件 Android软件开发之ListView 详解源码 欢迎大家下载阅读。
本文实例讲述了Android编程实现ListView中item部分区域添加点击事件功能。分享给大家供大家参考,具体如下: 需求如题目:Android listview中item部分区域添加点击事件,在一个界面显示了listview,但显示的内容分为...
android开发之listView,值得你下载啊啊啊
Android利用listview浏览新闻
android listview,ExpandableListView实现单选,多选,全选,edittext实现批量输入.zip
Android ListView卡片效果,源码下载。
Android使用ListView实现时间轴
滑动listview标题置顶,listview吸顶效果,安卓系统状态栏透明,有图有源码