浏览 10216 次
锁定老帖子 主题:Android 列表之分组ListView
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-10-10
main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/MyListView"> </ListView> </LinearLayout> list_items.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns: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"> <TextView android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/itemTitle" android:textSize="20dip" /> </LinearLayout> list_items_tag.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="#555555" android:paddingLeft="10dip"> <TextView android:id="@+id/itemTitle" android:layout_width="wrap_content" android:layout_height="20dip" android:textColor="#ffffff" android:gravity="center_vertical" /> </LinearLayout> MyAdapter.java package com.iaiai; import java.util.List; import java.util.Map; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; /** * * <p> * Title: MyAdapter.java * </p> * <p> * E-Mail: 176291935@qq.com * </p> * <p> * QQ: 176291935 * </p> * <p> * Http: iaiai.iteye.com * </p> * <p> * Create time: 2011-10-10 * </p> * * @author 丸子 * @version 0.0.1 */ public class MyAdapter extends BaseAdapter { private LayoutInflater mInflater; private List<Map<String, String>> listData; private List<Map<String, String>> splitData; public MyAdapter(Context context, List<Map<String, String>> listData, List<Map<String, String>> splitData) { this.mInflater = LayoutInflater.from(context); this.listData = listData; this.splitData = splitData; } @Override public int getCount() { return listData.size(); } @Override public Object getItem(int position) { return listData.get(position); } @Override public long getItemId(int position) { return position; } @Override public boolean isEnabled(int position) { if (splitData.contains(listData.get(position))) { return false; } return super.isEnabled(position); } @Override public View getView(final int position, View convertView, ViewGroup parent) { if (splitData.contains(listData.get(position))) { convertView = mInflater.inflate(R.layout.list_items_tag, null); } else { convertView = mInflater.inflate(R.layout.list_items, null); } TextView textView = (TextView) convertView.findViewById(R.id.itemTitle); textView.setText(listData.get(position).get("itemTitle")); return convertView; } } MainActivity.java package com.iaiai; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.widget.ListView; /** * * <p> * Title: MainActivity.java * </p> * <p> * E-Mail: 176291935@qq.com * </p> * <p> * QQ: 176291935 * </p> * <p> * Http: iaiai.iteye.com * </p> * <p> * Create time: 2011-10-10 * </p> * * @author 丸子 * @version 0.0.1 */ public class MainActivity extends Activity { private List<Map<String, String>> mylist = new ArrayList<Map<String, String>>(); private List<Map<String, String>> splitList = new ArrayList<Map<String, String>>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ListView list = (ListView) findViewById(R.id.MyListView); setData(); // 设置数据 // 配置适配器 MyAdapter adapter = new MyAdapter(this, mylist, splitList); // 布局里的控件id // 添加并且显示 list.setAdapter(adapter); } private void setData() { // 组织数据源 Map<String, String> mp = new HashMap<String, String>(); mp.put("itemTitle", "A"); mylist.add(mp); splitList.add(mp); for (int i = 0; i < 3; i++) { Map<String, String> map = new HashMap<String, String>(); map.put("itemTitle", "文章1-" + i); mylist.add(map); } mp = new HashMap<String, String>(); mp.put("itemTitle", "B"); mylist.add(mp); splitList.add(mp); for (int i = 0; i < 6; i++) { Map<String, String> map = new HashMap<String, String>(); map.put("itemTitle", "文章2-" + i); mylist.add(map); } } } ======================================================================== 以上为示例所有代码,以下为说明 禁止标签项的响应事件,父类BaseAdapter中提供了isEnable的()方法,我们看看这个方法: //默认情况,如果这个方法不是分割符,返回true //分隔符是无选中和无点击事件的 //说白了,你想不想把改position项当做分隔符,想的话就返回false,否则返回true public boolean isEnabled (int position) 这个方法刚好用来禁用标签项的响应事件。 @Override public boolean isEnabled(int position) { if (splitData.contains(listData.get(position))) { return false; } return super.isEnabled(position); } 现在标签项不会再有任何触控效果了,犹如一块死木板。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-10-13
受教了,我也回头试试,这个很有用的!
|
|
返回顶楼 | |
发表时间:2011-10-13
用SimpleCursorAdapter也可以实现吧 代码应该更简单一些
|
|
返回顶楼 | |
发表时间:2011-10-15
我最近也在研究这个,感谢楼主指出了一条路子。
|
|
返回顶楼 | |
发表时间:2011-10-25
前几天也在搞这个东西,所不同的是我用ScrollView,并且我的界面更复杂些,有点类似魅族M9的通讯录列表,右边还有字幕列表,点击字幕跳到ScrollView中对应点击的字母的分组地方,
|
|
返回顶楼 | |
发表时间:2011-10-31
不错,虽然不华丽却很使用~
|
|
返回顶楼 | |
发表时间:2011-12-19
学习了,第一次看到可以这样用,很有用
|
|
返回顶楼 | |