快速导航

Android之折叠列表ExpandableListView

Android 2017/03/15 15:03

android:groupIndicator用来设置组列表项的图标,默认一个三角线,这里我们设置为’@null’,然后自定义显示图标。

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.cheng.myapplication.MainActivity">

    <ExpandableListView
        android:id="@+id/elv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:groupIndicator="@null" />

</LinearLayout>

MainActivity.java

package com.example.cheng.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private ExpandableListView elv;
    private ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //创建BaseExpandableListAdapter对象
        ExpandableListAdapter ela=new BaseExpandableListAdapter() {
            private String[] groupTypes=new String[]{"歌手","演员","作家"};
            private String[][]  groups=new String[][]{
                    {"陈奕迅","周杰伦","李玟"},
                    {"刘诗诗","唐嫣","张国立","沙溢"},
                    {"大冰","席慕蓉","张嘉佳"}
            };

            @Override
            public int getGroupCount() {//返回包含的组列表项的数量
                return groupTypes.length;
            }

            @Override
            public int getChildrenCount(int groupPosition) {//返回特定组所包含的子列表项的数量
                return groups[groupPosition].length;
            }

            @Override
            public Object getGroup(int groupPosition) {  //获取指定组位置处的组数据
                return groupTypes[groupPosition];
            }

            @Override
            public Object getChild(int groupPosition, int childPosition) {
                return groups[groupPosition][childPosition];
            }

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

            @Override
            public long getChildId(int groupPosition, int childPosition) {
                return childPosition;
            }

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

            private TextView getTextView(){
                AbsListView.LayoutParams lp=new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,64);
                TextView textView=new TextView(MainActivity.this);
                textView.setLayoutParams(lp);
                textView.setGravity(Gravity.CENTER_VERTICAL|Gravity.LEFT);
                textView.setPadding(36,0,0,0);
                textView.setTextSize(20);
                return textView;
            }

            //设置每个组选项的外观
            @Override
            public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {//返回的View对象将作为组列表项
                LinearLayout ll=new LinearLayout(MainActivity.this);
                ll.setOrientation(LinearLayout.HORIZONTAL);
                imageView=new ImageView(MainActivity.this);
                if(isExpanded){//判断选项组状态是否是打开
                    imageView.setImageResource(R.drawable.triangle1);
                }else{
                    imageView.setImageResource(R.drawable.triangle0);
                }
                ll.addView(imageView);
                TextView textView=getTextView();
                textView.setText(getGroup(groupPosition).toString());
                ll.addView(textView);
                return ll;
            }
            //设置每个子选项的外观
            @Override
            public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {//返回的View对象将作为特定组、特定位置的子列表项
                TextView textView=getTextView();
                textView.setText(getChild(groupPosition, childPosition).toString());
                return textView;
            }

            @Override
            public boolean isChildSelectable(int groupPosition, int childPosition) {
                return true;
            }
        };

        elv=(ExpandableListView)findViewById(R.id.elv);
        elv.setAdapter(ela);

        //为子列表设置点击监听
        elv.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
            @Override
            public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
                String str=groupPosition+"-"+childPosition+"被点击";
                Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show();
                return false;
            }
        });
    }
}

效果如图

代码分享

链接:百度云盘 密码:k5f7

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

Powered by codetiler.com