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

 更新时间:2014年07月10日 09:20:59   投稿:junjie  
这篇文章主要介绍了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;
    }
}

相关文章

  • Android Studio配置内嵌JDK的方法

    Android Studio配置内嵌JDK的方法

    这篇文章主要介绍了Android Studio配置内嵌JDK的方法,需要的朋友可以参考下
    2018-02-02
  • Android中实现在矩形框中输入文字显示剩余字数的功能

    Android中实现在矩形框中输入文字显示剩余字数的功能

    在矩形输入框框中输入文字显示剩余字数的功能在app开发中经常会见到,今天小编就通过实例代码给大家分享android实现输入框提示剩余字数功能,代码简单易懂,需要的朋友参考下吧
    2017-04-04
  • Android Studio连接MySql实现登录注册(附源代码)

    Android Studio连接MySql实现登录注册(附源代码)

    登录注册是常用的一个功能,正好今天用android studio 做一个类似于这样的登录软件,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Kotlin中的一些技巧与迂回操作分享

    Kotlin中的一些技巧与迂回操作分享

    这篇文章主要给大家介绍了关于Kotlin中的一些技巧与迂回操作的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用kotlin具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • Android轮播图点击图片放大效果的实现方法

    Android轮播图点击图片放大效果的实现方法

    这篇文章主要给大家介绍了关于Android轮播图点击图片放大效果的实现方法,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • Android 三行代码实现高斯模糊效果

    Android 三行代码实现高斯模糊效果

    这篇文章主要介绍了Android 三行代码实现高斯模糊效果,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Android中volley封装实践记录

    Android中volley封装实践记录

    这篇文章主要给大家介绍了关于Android中volley封装实践的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一学习学习吧
    2019-02-02
  • XListView实现下拉刷新和上拉加载原理解析

    XListView实现下拉刷新和上拉加载原理解析

    这篇文章主要为大家解析了XListView实现下拉刷新和上拉加载原理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • 基于界面适配华为手机的虚拟按键的解决方法

    基于界面适配华为手机的虚拟按键的解决方法

    下面小编就为大家分享一篇基于界面适配华为手机的虚拟按键的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Android编程四大组件分别是什么

    Android编程四大组件分别是什么

    大家知道Android编程四大组件分别是什么吗?这篇文章主要为大家详细介绍了Android四大组件,感兴趣的小伙伴们可以参考一下
    2016-06-06

最新评论