«

ListView的item折叠功能实现,使用ExpandableListView

时间:2024-3-2 18:27     作者:韩俊     分类: Android


来酷狗面试的时候面试官问过我,如果要显示/隐藏ListView的某个Item项目中的某些内容,我会怎么做。

我当时的回答是,做一个布局文件里面把所有要用到的项目都写上,哪个不需要了就将他设为gone就可以了。

今天在看代码的时候发现,原来有ExpandableListView这个东西,很明显,我当时的回答有点太浅层次了。

ExpandableListView见名知意,专门用于实现可收缩的ListView,即其中的item有父子item。实现的效果大致如下,使用ExpandableListView来做父子Item实现起来相当容易。


ExpandableListView使用ExpandableListAdapter来做为其适配器,ExpandableListAdapter也有其基础适配器BaseExpandableListAdapter;

具体代码如下:

package com.wallj.listviewdemo;

import android.R.color;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.TextView;

public class ExpandableListViewDemo extends Activity {
    ExpandableListView mExpdListView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_expandable_list_view_demo);
        mExpdListView = (ExpandableListView) findViewById(R.id.exListView);
        mExpdListView.setAdapter(mExAdapter);
    }
    ExpandableListAdapter mExAdapter = new BaseExpandableListAdapter() {
        private String[] generalsTypes = new String[] { "魏", "蜀", "吴" };
        private String[][] generals = new String[][] {
                { "夏侯惇", "甄姬", "许褚", "郭嘉", "司马懿", "杨修" },
                { "马超", "张飞", "刘备", "诸葛亮", "黄月英", "赵云" },
                { "吕蒙", "陆逊", "孙权", "周瑜", "孙尚香" }

        };

        @Override
        public boolean isChildSelectable(int arg0, int arg1) {
            return false;
        }

        @Override
        public boolean hasStableIds() {
            return true;
        }

        @Override
        public View getGroupView(int arg0, boolean arg1, View arg2, ViewGroup arg3) {
            if(arg2 == null){
                arg2 = new TextView(ExpandableListViewDemo.this);
                ((TextView)arg2).setTextSize(30);
            }
            ((TextView)arg2).setText(generalsTypes[arg0]);
            return arg2;
        }

        @Override
        public long getGroupId(int arg0) {
            return arg0;
        }

        @Override
        public int getGroupCount() {
            return generalsTypes.length;
        }

        @Override
        public Object getGroup(int arg0) {
            return generalsTypes[arg0];
        }

        @Override
        public int getChildrenCount(int arg0) {
            return generals[arg0].length;
        }

        @Override
        public View getChildView(int arg0, int arg1, boolean arg2, View arg3,
                ViewGroup arg4) {
            if(arg3 == null){
                arg3 = new TextView(ExpandableListViewDemo.this);
            }
            ((TextView)arg3).setText(generals[arg0][arg1]);
            return arg3;
        }

        @Override
        public long getChildId(int arg0, int arg1) {
            return arg1;
        }

        @Override
        public Object getChild(int arg0, int arg1) {
            return generals[arg0][arg1];
        }
    };

}


标签: android

热门推荐