以下是一个简单的示例代码,展示了如何在 ExpandableListView 中嵌套一个 GridView 二级菜单。

  1. 首先,需要定义一个 ExpandableListView 的布局文件,例如:
<ExpandableListView
    android:id="@+id/expandableListView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
  1. 接下来,需要定义一个适配器来填充 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;
    }
}
  1. 最后,需要在 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 的每个项目中。

Android ExpandableListView 嵌套二级 GridView 菜单代码示例

原文地址: https://www.cveoy.top/t/topic/nGZn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录