今天给大家讲讲android的目录实现方法,就像大家看到的小说目录一样,android 提供了ExpandableListView控件可以实现二级列表展示效果,现在给大家讲讲这个控件的用法,下面是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="fill_parent" android:orientation="vertical" android:background="#FFFFFF" > <ExpandableListView android:id="@+id/elv_journal_catalog" android:layout_height="fill_parent" android:layout_width="fill_parent" android:cacheColorHint="#FFFFFF" /> </LinearLayout>

这代码很简单,和写listView的方法差不多,接下来是ExpandableListView在activity中的代码:

private ExpandableListView elv_journal_catalog; private List<List<Article>> childrenObj; private JournalCatalogListAdapter adapter; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.journal_catalog); init(); elv_journal_catalog.setGroupIndicator(null); elv_journal_catalog.setDivider(null); loadData(); } private void init() { elv_journal_catalog = (ExpandableListView) findViewById(R.id.elv_journal_catalog); elv_journal_catalog.setOnChildClickListener(listener); } private void loadData() { Message msg = handler.obtainMessage(); msg.what = 1; msg.sendToTarget(); childrenObj = new ArrayList<List<Article>>(); new Thread() { @Override public void run() { if (!isLoading) { queryArticleList(); } else { queryArticleListFromSqlite(); } } }.start(); adapter = new JournalCatalogListAdapter(this, childrenObj); elv_journal_catalog.setAdapter(adapter); }

ExpandableListView展示数据的时候默认是每个模块下的列表项是闭合状态的,如果要实现初始化的时候就展开可以通过ExpandableListView.expandGroup(location)方法来实现,而且每个父级列表项左边会出现一个系统自带的图标,这个图标是用来表示列表展开和闭合的状态的,如果不显示或者要替换这个图标可以用ExpandableListView.setGroupIndicator(Drawable icon)方法来实现,我这里是直接是没有使用任何图标,你也可以在adapter中自己在xml中定义自己的图标.

ExpandableListView填充数据需要是二级菜单的模式所以数据结构大家可以根据项目情况而定,我这里由于标题是定死的所以只传的每个标题下的数据,下面是JournalCatalogListAdapter的代码:

public class JournalCatalogListAdapter extends BaseExpandableListAdapter { private LayoutInflater inflater; private String[] parent = new String[] { "美颜美体", "潮流单品", "娱乐八卦", "情感", "观点", "健康生活" }; private List<List<Article>> clildren = new ArrayList<List<Article>>(); public JournalCatalogListAdapter(Context context, List<List<Article>> clildren) { this.clildren = clildren; inflater = LayoutInflater.from(context); } @Override public Object getChild(int groupPosition, int childPosition) { return clildren.get(groupPosition).get(childPosition); } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { if (convertView == null) { convertView = inflater.inflate( R.layout.journal_catalog_list_item_content, null); } TextView textView = (TextView) convertView .findViewById(R.id.tv_journal_catalog_list_item_content); Article a = (Article) getChild(groupPosition, childPosition); textView.setText(a.getTitle()); return convertView; } @Override public int getChildrenCount(int groupPosition) { return clildren.get(groupPosition).size(); } @Override public Object getGroup(int groupPosition) { return parent[groupPosition]; } @Override public int getGroupCount() { return parent.length; } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { if (convertView == null) { convertView = inflater.inflate( R.layout.journal_catalog_list_item_title, null); } TextView textView = (TextView) convertView .findViewById(R.id.tv_journal_catalog_list_item_title); String title = String.valueOf(getGroup(groupPosition)); textView.setText(title); convertView.setOnClickListener(null); return convertView; } @Override public boolean hasStableIds() { return true; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } }

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. Android(安卓)WebView系列文章2-WebView和js交互
  5. Android(安卓)中.aar文件生成方法与用法
  6. ListView setOnItemClickListener无效原因详细分析
  7. Android(安卓)中自定义控件和属性(attr.xml,declare-styleable,T
  8. Android(安卓)Studio中获取sha1证书的方法
  9. ListView setOnItemClickListener无效原因分析

随机推荐

  1. sql 版本详解 让你认识跟sql2000的区别
  2. SQLSERVER 时间格式大全
  3. sqlserver replace函数 批量替换数据库中
  4. sql 中 case when 语法使用方法
  5. 将MS SQL SERVER数据库运行在普通用户(独
  6. SQLServer 优化SQL语句 in 和not in的替
  7. SQL Server 2005/2008 用户数据库文件默
  8. SQL 时间格式化函数
  9. 全国省市区县最全最新数据表(数据来源谷
  10. SQLServer 数据库故障修复顶级技巧之一