Android(安卓)ListView列表分组
16lz
2022-05-30
运行效果:
main.xml
[java] view plain copy
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal"android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <ListViewandroid:layout_width="fill_parent"
- android:layout_height="wrap_content"android:id="@+id/MyListView">
- </ListView>
- </LinearLayout>
list_items.xml
[java] view plain copy
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"android:layout_width="fill_parent"
- android:layout_height="wrap_content"android:id="@+id/myListItem"
- android:paddingBottom="4dip"android:paddingLeft="12dip"
- android:paddingRight="12dip">
- <TextViewandroid:layout_height="wrap_content"
- android:layout_width="fill_parent"android:id="@+id/itemTitle"
- android:textSize="20dip"/>
- </LinearLayout>
list_items_tag.xml
[java] view plain copy
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"android:layout_height="wrap_content"
- android:background="#555555"android:paddingLeft="10dip">
- <TextViewandroid:id="@+id/itemTitle"android:layout_width="wrap_content"
- android:layout_height="20dip"android:textColor="#ffffff"
- android:gravity="center_vertical"/>
- </LinearLayout>
MyAdapter.java
[java] view plain copy
- packagecom.iaiai;
- importjava.util.List;
- importjava.util.Map;
- importandroid.content.Context;
- importandroid.view.LayoutInflater;
- importandroid.view.View;
- importandroid.view.ViewGroup;
- importandroid.widget.BaseAdapter;
- importandroid.widget.TextView;
- publicclassMyAdapterextendsBaseAdapter{
- privateLayoutInflatermInflater;
- privateList<Map<String,String>>listData;
- privateList<Map<String,String>>splitData;
- publicMyAdapter(Contextcontext,
- List<Map<String,String>>listData,
- List<Map<String,String>>splitData){
- this.mInflater=LayoutInflater.from(context);
- this.listData=listData;
- this.splitData=splitData;
- }
- @Override
- publicintgetCount(){
- returnlistData.size();
- }
- @Override
- publicObjectgetItem(intposition){
- returnlistData.get(position);
- }
- @Override
- publiclonggetItemId(intposition){
- returnposition;
- }
- @Override
- publicbooleanisEnabled(intposition){
- if(splitData.contains(listData.get(position))){
- returnfalse;
- }
- returnsuper.isEnabled(position);
- }
- @Override
- publicViewgetView(finalintposition,ViewconvertView,ViewGroupparent){
- if(splitData.contains(listData.get(position))){
- convertView=mInflater.inflate(R.layout.list_items_tag,null);
- }else{
- convertView=mInflater.inflate(R.layout.list_items,null);
- }
- TextViewtextView=(TextView)convertView.findViewById(R.id.itemTitle);
- textView.setText(listData.get(position).get("itemTitle"));
- returnconvertView;
- }
- }
MainActivity.java
[java] view plain copy
- packagecom.iaiai;
- importjava.util.ArrayList;
- importjava.util.HashMap;
- importjava.util.List;
- importjava.util.Map;
- importandroid.app.Activity;
- importandroid.os.Bundle;
- importandroid.widget.ListView;
- publicclassMainActivityextendsActivity{
- privateList<Map<String,String>>mylist=newArrayList<Map<String,String>>();
- privateList<Map<String,String>>splitList=newArrayList<Map<String,String>>();
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- ListViewlist=(ListView)findViewById(R.id.MyListView);
- setData();//设置数据
- //配置适配器
- MyAdapteradapter=newMyAdapter(this,mylist,splitList);//布局里的控件id
- //添加并且显示
- list.setAdapter(adapter);
- }
- privatevoidsetData(){
- //组织数据源
- Map<String,String>mp=newHashMap<String,String>();
- mp.put("itemTitle","A");
- mylist.add(mp);
- splitList.add(mp);
- for(inti=0;i<3;i++){
- Map<String,String>map=newHashMap<String,String>();
- map.put("itemTitle","文章1-"+i);
- mylist.add(map);
- }
- mp=newHashMap<String,String>();
- mp.put("itemTitle","B");
- mylist.add(mp);
- splitList.add(mp);
- for(inti=0;i<6;i++){
- Map<String,String>map=newHashMap<String,String>();
- map.put("itemTitle","文章2-"+i);
- mylist.add(map);
- }
- }
- }
========================================================================
以上为示例所有代码,以下为说明
禁止标签项的响应事件,父类BaseAdapter中提供了isEnable的()方法,我们看看这个方法:
Java代码
- //默认情况,如果这个方法不是分割符,返回true
- //分隔符是无选中和无点击事件的
- //说白了,你想不想把改position项当做分隔符,想的话就返回false,否则返回true
- publicbooleanisEnabled(intposition)
//默认情况,如果这个方法不是分割符,返回true
//分隔符是无选中和无点击事件的
//说白了,你想不想把改position项当做分隔符,想的话就返回false,否则返回true
public boolean isEnabled (int position)
这个方法刚好用来禁用标签项的响应事件。
[java] view plain copy
- @Override
- publicbooleanisEnabled(intposition){
- if(splitData.contains(listData.get(position))){
- returnfalse;
- }
- returnsuper.isEnabled(position);
- }
现在标签项不会再有任何触控效果了,犹如一块死木板。
原地址:http://blog.sina.com.cn/s/blog_4ca9ceef0100za7f.html
更多相关文章
- android MTK modem编译方法
- Android(安卓)设置全屏显示的方法
- 【Android】 ProcessBuild Process su 命令
- Android(安卓)调用系统相机拍照的返回结果
- vs xamarin android 监听返回键退出程序
- Android(安卓)永久隐藏导航栏,系统栏的方法
- Android(安卓)— 创建和修改 Fragment 的方法及相关注意事项
- 浅谈Java中Collections.sort对List排序的两种方法
- Python list sort方法的具体使用