android使用ExpandableListView控件实现小说目录效果的例子

今天给大家讲讲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;
    }
}

时间: 2024-10-29 16:10:03

android使用ExpandableListView控件实现小说目录效果的例子的相关文章

android使用ExpandableListView控件实现小说目录效果的例子_Android

今天给大家讲讲android的目录实现方法,就像大家看到的小说目录一样,android 提供了ExpandableListView控件可以实现二级列表展示效果,现在给大家讲讲这个控件的用法,下面是XML定义: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout     xmlns:android="http://schemas.android.com/apk/re

分享Android中ExpandableListView控件使用教程_Android

本文采用一个Demo来展示Android中ExpandableListView控件的使用,如如何在组/子ListView中绑定数据源.直接上代码如下: 程序结构图: layout目录下的 main.xml 文件源码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android

分享Android中ExpandableListView控件使用教程

本文采用一个Demo来展示Android中ExpandableListView控件的使用,如如何在组/子ListView中绑定数据源.直接上代码如下: 程序结构图: layout目录下的 main.xml 文件源码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android

Android常用布局控件之RelativeLayout

我们使用LinearLayout和TableLayout可以满足开发应用程序界面基本的要求 .但是有时候实现界面的时候不够灵活,我们还可以使用另外一种控件 RelativeLayout.RelativeLayout是一种相对布局的控件,这个容器内部的子元 素们可以使用彼此之间的相对位置或者和容器间的相对位置来进行定位,类似于 网页设计中的CSS.在指定控件的位置时,我们需要指定这个控件与其它控件之 间的相对位置关系,比如说与另一个控件的左边对齐,右对齐,位于另一个控件 的上方,下方等等.一个控件

Android常见布局控件之LinearLayout和TableLayout

一.LinearLayout布局控件 xml属性 android:baselineAligned:是否允许用户调整它内容的基线. android:baselineAlignedChildIndex:当一个线性布局与另一个布局是按基 线对齐的一部分,它可以指定其内容的基线对齐方式. android:gravity:指定控件中内容的基本内容. android:orientation:设置它内容的对其方向,有两个可以选择的值: horizontal和vertical.分别表示水平排列和垂直排列. Li

android之SeekBar控件用法详解_Android

MainActivity.java package com.example.mars_2400_seekbar; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.app.Activity; import android.os.Bundle; import a

android之RatingBar控件用法详解_Android

MainActivity.java package com.example.mars_2500_ratingbar; import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.app.Activity; import android.os.Bundle; import

Android编程布局控件之AbsoluteLayout用法实例分析_Android

本文实例讲述了Android编程布局控件之AbsoluteLayout用法.分享给大家供大家参考,具体如下: AbsoluteLayout是绝对布局管理器,指的是指定组件的左上角绝对坐标来指定组件的布局 <?xml version="1.0" encoding="utf-8"?> <AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"

Android Material Design控件学习(三)——使用TextInputLayout实现酷市场登录效果

前言 前两次,我们学习了 Android Material Design控件学习(一)--TabLayout的用法 Android Material Design控件学习(二)--NavigationView的学习和使用 今天我们继续MD控件的学习和使用.在学习之前,我们先来看一下酷市场的登录效果. 实现这种效果的正是我们今天的主角--TextInputLayout. 学习 不管学习什么,首先看它的官方文档.这是最权威,最高效的学习途径. 文档地址:http://developer.androi