dialog上实现下拉加载功能,有二级联动子菜单,ExpandableListView来实现

1. 首页创建 MainActivity.jav类。

package com.example.hasee.expandablelistviewdemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.Toast;

public class MainActivity2 extends AppCompatActivity {
    private String TAG = this.getClass().getSimpleName();
    private ExpandableListView expandableListView;
    public String[] groupString = {"射手","辅助","坦克","法师"};
    public String[][] childString = {
            {"孙尚香","后羿","马可波罗","狄仁杰"},
            {"孙膑","蔡文姬","鬼谷子","杨玉环"},
            {"张飞","廉颇","牛魔","项羽"},
            {"诸葛亮","王昭君","安琪拉","干将"}

    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        expandableListView = (ExpandableListView)findViewById(R.id.expend_list);
        final MyExtendableListViewAdapter2 mAdapter = new MyExtendableListViewAdapter2();
        mAdapter.setGroupString(groupString);
        mAdapter.setChildString(childString);
        expandableListView.setAdapter(mAdapter);
        //---------------------------------------------------
        int count = mAdapter.getGroupCount();
        Log.e(TAG,"控制他只能打开一个组----------------- 2 count : " + count);
        for(int i = 0;i < count;i++){
            expandableListView.expandGroup(i);          // TODO 在分组列表视图中展开   全部展开
            /*if (i!=groupPosition){
                expandableListView.collapseGroup(i);        // 在分组列表视图中折叠组
            }*//*else {
                        expandableListView.expandGroup(i);          // 在分组列表视图中展开一个组
//                        expandableListView.setSelectedGroup(groupPosition);//置顶,将选择设置为指定的组
                    }*/
        }
        //---------------------------------------------------
        //设置分组的监听
        expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
            @Override
            public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
                Toast.makeText(getApplicationContext(), groupString[groupPosition], Toast.LENGTH_SHORT).show();
                return false;    // true: 禁用 展开、折叠功能。 false: 启用 展开、折叠功能。
            }
        });
        //设置子项布局监听
        expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
            @Override
            public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
                Toast.makeText(getApplicationContext(), childString[groupPosition][childPosition], Toast.LENGTH_SHORT).show();
                return true;

            }
        });
        //控制他只能打开一个组
        expandableListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
            @Override
            public void onGroupExpand(int groupPosition) {
                Log.e(TAG,"控制他只能打开一个组----------------- 2");
                int count = mAdapter.getGroupCount();
                Log.e(TAG,"控制他只能打开一个组----------------- 2 count : " + count);
                for(int i = 0;i < count;i++){
                    if (i!=groupPosition){
                        expandableListView.collapseGroup(i);        // 在分组列表视图中折叠组
                    }/*else {
                        expandableListView.expandGroup(i);          // 在分组列表视图中展开一个组
//                        expandableListView.setSelectedGroup(groupPosition);//置顶,将选择设置为指定的组
                    }*/
                }
                mAdapter.notifyDataSetChanged();
            }
        });
    }
}

2. 再创建

MyExtendableListViewAdapter2.java
package com.example.hasee.expandablelistviewdemo;

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;

public class MyExtendableListViewAdapter2 extends BaseExpandableListAdapter {
    private String TAG = this.getClass().getSimpleName();
    private Context mcontext;
    public String[] groupString = {};
    public String[][] childString = {};
    /*public String[] groupString = {"射手", "辅助", "坦克", "法师"};
    public String[][] childString = {
            {"孙尚香", "后羿", "马可波罗", "狄仁杰"},
            {"孙膑", "蔡文姬", "鬼谷子", "杨玉环"},
            {"张飞", "廉颇", "牛魔", "项羽"},
            {"诸葛亮", "王昭君", "安琪拉", "干将"}

    };*/

    @Override
    // 获取分组的个数  rhjadd 20190312
    public int getGroupCount() {
        Log.e(TAG,"getGroupString() --------  getGroupString().length: " + getGroupString().length);
        return getGroupString().length;
    }

    /*@Override
    // 获取分组的个数
    public int getGroupCount() {
        return groupString.length;
    }*/

    //获取指定分组中的子选项的个数
    @Override
    public int getChildrenCount(int groupPosition) {
        return childString[groupPosition].length;
    }

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

    //获取指定分组中的指定子选项数据
    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return childString[groupPosition][childPosition];
    }

    //获取指定分组的ID, 这个ID必须是唯一的
    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    //获取子选项的ID, 这个ID必须是唯一的
    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    //分组和子选项是否持有稳定的ID, 就是说底层数据的改变会不会影响到它们
    @Override
    public boolean hasStableIds() {
        return true;
    }
/**
 *
 * 获取显示指定组的视图对象
 *
 * @param groupPosition 组位置
 * @param isExpanded 该组是展开状态还是伸缩状态
 * @param convertView 重用已有的视图对象
 * @param parent 返回的视图对象始终依附于的视图组
  */
// 获取显示指定分组的视图
    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        GroupViewHolder groupViewHolder;
        if (convertView == null){
            convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.partent_item,parent,false);
            groupViewHolder = new GroupViewHolder();
            groupViewHolder.tvTitle = (TextView)convertView.findViewById(R.id.label_group_normal);
            convertView.setTag(groupViewHolder);
        }else {
            groupViewHolder = (GroupViewHolder)convertView.getTag();
        }
        groupViewHolder.tvTitle.setText(groupString[groupPosition]);
        return convertView;
    }
    /**
     *
     * 获取一个视图对象,显示指定组中的指定子元素数据。
     *
     * @param groupPosition 组位置
     * @param childPosition 子元素位置
     * @param isLastChild 子元素是否处于组中的最后一个
     * @param convertView 重用已有的视图(View)对象
     * @param parent 返回的视图(View)对象始终依附于的视图组
     * @return
     * @see android.widget.ExpandableListAdapter#getChildView(int, int, boolean, android.view.View,
     *      android.view.ViewGroup)
     */

    //取得显示给定分组给定子位置的数据用的视图
    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        ChildViewHolder childViewHolder;
        if (convertView==null){
            convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.child_item,parent,false);
            childViewHolder = new ChildViewHolder();
            childViewHolder.tvTitle = (TextView)convertView.findViewById(R.id.expand_child);
            convertView.setTag(childViewHolder);

        }else {
            childViewHolder = (ChildViewHolder) convertView.getTag();
        }
        childViewHolder.tvTitle.setText(childString[groupPosition][childPosition]);
        return convertView;
    }

    //指定位置上的子元素是否可选中
    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }

    static class GroupViewHolder {
        TextView tvTitle;
    }

    static class ChildViewHolder {
        TextView tvTitle;

    }

    public String[] getGroupString() {
        Log.e(TAG,"getGroupString() --------  groupString.length: " + groupString.length);
        return groupString;
    }

    public void setGroupString(String[] groupString) {
        Log.e(TAG,"setGroupString() --------  groupString.length: " + groupString.length);
        this.groupString = groupString;
    }

    public String[][] getChildString() {
        Log.e(TAG,"getChildString() --------  childString.length: " + childString.length);
        return childString;
    }

    public void setChildString(String[][] childString) {
        Log.e(TAG,"setChildString() --------  childString.length: " + childString.length);
        this.childString = childString;
    }
}

3. activity_main.xml 布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity2">

   <ExpandableListView
       android:id="@+id/expend_list"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:layoutDirection="rtl"></ExpandableListView>

</LinearLayout>

4.AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.hasee.expandablelistviewdemo">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity2">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

5. child_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/expand_child"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:textSize="16sp"
    android:paddingTop="8dp"
    android:paddingBottom="8dp"
    tools:text="测试数据"/>

6.partent_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/label_group_normal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/holo_blue_light"
    android:gravity="left"
    android:paddingBottom="8dp"
    android:paddingLeft="32dp"
    android:paddingTop="8dp"
    android:textColor="@android:color/white"
    android:textSize="20sp"
    tools:text="测试数据"
    android:layoutDirection="ltr"/>

所有资料完成。

通过设置属性,可实现只显示一个Group的子菜单 , 显示全部Group的子菜单 。需要自己设置就可以了。

也可以直接下载DEmo:

https://download.csdn.net/download/renhaijuniryfe/11013490

看效果图。

也可以直接下载DEmo:

https://download.csdn.net/download/renhaijuniryfe/11013490

猜你喜欢

转载自blog.csdn.net/renhaijuniryfe/article/details/88417566
今日推荐