expandablelistview长按点击事件的demo

我理解的是expandablelistview分为六个部分:activity,activity.xml,group.xml,item.xml,adapter,实体类;

activity是程序的活动部分;

activity.xml是对应活动的界面,本demo写了一个expandablelistview;

group.xml是程序界面的group部分布局;

item.xml是程序的item部分界面布局;

adapter是适配器;

实体类是传进去的参数(本demo中放到了MainActivity.java中的list_group和list_item中)。

下面是具体的程序:

1.MainActivity.java

package com.example.expandablelistview;

import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ExpandableListView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    List<String> list_group = new ArrayList<>();
    List<List<String>> list_item = new ArrayList<>();
    ExpandableListView expandableListView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initData();
        expandableListView = findViewById(R.id.exp_id);
        Expandable_Adapter adapter = new Expandable_Adapter(list_group,list_item);
        expandableListView.setAdapter(adapter);
        expandableListView.setOnItemLongClickListener(onItemLongClickListener);
    }
    private AdapterView.OnItemLongClickListener onItemLongClickListener = new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
            final long packposition = expandableListView.getExpandableListPosition(i);
            final int position_group = ExpandableListView.getPackedPositionGroup(packposition);
            final int position_item = ExpandableListView.getPackedPositionChild(packposition);
            if(position_item==-1){//点击group,position_item=-1
                Toast.makeText(MainActivity.this,"您点击的是:\n"+list_group.get(position_group),Toast.LENGTH_SHORT).show();
            }else {
                Toast.makeText(MainActivity.this,"您点击的是:"+list_item.get(position_group).get(position_item),Toast.LENGTH_SHORT).show();
            }
            return true;
        }
    };
/************************这里是给实体类赋值***************************/
    private void initData() {
        for (int i = 0;i<6;i++){
            list_group.add(i+"");//group实体类赋值
            List<String> list = new ArrayList<>();
            for (int j = 0;j <10 ;j++){
                list.add("("+j+")");//中间list
            }
            list_item.add(list);//item赋值
        }
    }
/*********************************************************************/
}

2.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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <ExpandableListView
        android:id="@+id/exp_id"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </ExpandableListView>

</LinearLayout>

3.group.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="10dp"
        android:id="@+id/tv_group"/>

</LinearLayout>

4.item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/tv_item"/>

</LinearLayout>

5.Expandable_Adapter.java

package com.example.expandablelistview;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class Expandable_Adapter extends BaseExpandableListAdapter {
    List<String> list_group = new ArrayList<>();
    List<List<String>> list_item = new ArrayList<>();

    public Expandable_Adapter(List<String> list_group, List<List<String>> list_item) {
        this.list_group = list_group;
        this.list_item = list_item;
    }

    @Override
    public int getGroupCount() {
        return list_group==null?0:list_group.size();
    }

    @Override
    public int getChildrenCount(int i) {
        return list_item.get(i)==null?0:list_item.get(i).size();
    }

    @Override
    public Object getGroup(int i) {
        return list_group.get(i);
    }

    @Override
    public Object getChild(int i, int i1) {
        return list_item.get(i).get(i1);
    }

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

    @Override
    public long getChildId(int i, int i1) {
        return i1;
    }

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

    ViewHolder_group viewHolder_group;
    ViewHolder_item viewHolder_item;
    @Override
    public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) {
        if (view==null){
            viewHolder_group = new ViewHolder_group();
            view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.group,viewGroup,false);
            viewHolder_group.tv_group = view.findViewById(R.id.tv_group);
            view.setTag(viewHolder_group);
        }else {
            viewHolder_group= (ViewHolder_group) view.getTag();
        }
        viewHolder_group.tv_group.setText(list_group.get(i));
        return view;
    }

    @Override
    public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {
        if (view==null){
            viewHolder_item = new ViewHolder_item();
            view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item,viewGroup,false);
            viewHolder_item.tv_item = view.findViewById(R.id.tv_item);
            view.setTag(viewHolder_item);
        }else{
            viewHolder_item = (ViewHolder_item) view.getTag();
        }
        viewHolder_item.tv_item.setText(list_item.get(i).get(i1));
        return view;
    }

    @Override
    public boolean isChildSelectable(int i, int i1) {
        return true;
    }

    private class ViewHolder_group {
        TextView tv_group;
    }

    private class ViewHolder_item {
        TextView tv_item;
    }
}
LI.
发布了5 篇原创文章 · 获赞 1 · 访问量 6817

猜你喜欢

转载自blog.csdn.net/weixin_42369752/article/details/104246540