Android ExpandableListView 嵌套二级 GridView 菜单代码示例
以下是一个简单的示例代码,展示了如何在 ExpandableListView 中嵌套一个 GridView 二级菜单。
- 首先,需要定义一个 ExpandableListView 的布局文件,例如:
<ExpandableListView
android:id="@+id/expandableListView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
- 接下来,需要定义一个适配器来填充 ExpandableListView 和 GridView。以下是适配器的示例代码:
public class MyExpandableListAdapter extends BaseExpandableListAdapter {
private Context mContext;
private List<String> mGroupList;
private List<List<String>> mChildList;
public MyExpandableListAdapter(Context context, List<String> groupList, List<List<String>> childList) {
mContext = context;
mGroupList = groupList;
mChildList = childList;
}
@Override
public int getGroupCount() {
return mGroupList.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return 1;
}
@Override
public Object getGroup(int groupPosition) {
return mGroupList.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return mChildList.get(groupPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_group, null);
}
TextView textView = convertView.findViewById(R.id.list_group_title);
textView.setText(mGroupList.get(groupPosition));
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_child, null);
}
GridView gridView = convertView.findViewById(R.id.gridview);
gridView.setAdapter(new MyGridAdapter(mContext, mChildList.get(groupPosition)));
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
}
class MyGridAdapter extends BaseAdapter {
private Context mContext;
private List<String> mList;
public MyGridAdapter(Context context, List<String> list) {
mContext = context;
mList = list;
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.grid_item, null);
}
TextView textView = convertView.findViewById(R.id.grid_item_title);
textView.setText(mList.get(position));
return convertView;
}
}
- 最后,需要在 Activity 中设置 ExpandableListView 的适配器,例如:
public class MainActivity extends AppCompatActivity {
private ExpandableListView mExpandableListView;
private MyExpandableListAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mExpandableListView = findViewById(R.id.expandableListView);
List<String> groupList = new ArrayList<>();
groupList.add('Group 1');
groupList.add('Group 2');
List<List<String>> childList = new ArrayList<>();
List<String> child1 = new ArrayList<>();
child1.add('Child 1-1');
child1.add('Child 1-2');
child1.add('Child 1-3');
child1.add('Child 1-4');
childList.add(child1);
List<String> child2 = new ArrayList<>();
child2.add('Child 2-1');
child2.add('Child 2-2');
childList.add(child2);
mAdapter = new MyExpandableListAdapter(this, groupList, childList);
mExpandableListView.setAdapter(mAdapter);
}
}
以上代码将创建一个包含两个组的 ExpandableListView,第一个组有四个 GridView 项,第二个组有两个 GridView 项。GridView 项的标题将显示在 GridView 的每个项目中。
原文地址: https://www.cveoy.top/t/topic/nGZn 著作权归作者所有。请勿转载和采集!