我理解的是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; } }