利用ExpandableListView实现侧边栏导航

avatar
作者
猴君
阅读量:0

ExpandableListView 是一个可以展开和收起子列表项的 Android 控件,非常适合用于实现侧边栏导航

  1. activity_main.xml 布局文件中添加 ExpandableListView
    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:id="@+id/drawer_layout"     android:layout_width="match_parent"     android:layout_height="match_parent"     tools:openDrawer="start">     <LinearLayout         android:layout_width="match_parent"         android:layout_height="match_parent"         android:orientation="vertical">          <!-- 主内容视图 -->        <FrameLayout             android:id="@+id/content_frame"             android:layout_width="match_parent"             android:layout_height="match_parent"/>      </LinearLayout>     <ExpandableListView         android:id="@+id/navigation_list"         android:layout_width="240dp"         android:layout_height="match_parent"         android:layout_gravity="start"         android:background="@color/white"         android:choiceMode="singleChoice"         android:divider="@color/gray"         android:dividerHeight="1dp"         android:groupIndicator="@null"/>  </androidx.drawerlayout.widget.DrawerLayout> 
  1. 创建一个数据模型类,例如 NavigationItem,用于存储导航项的信息:
public class NavigationItem {     private String title;     private int icon;      public NavigationItem(String title, int icon) {         this.title = title;         this.icon = icon;     }      public String getTitle() {         return title;     }      public void setTitle(String title) {         this.title = title;     }      public int getIcon() {         return icon;     }      public void setIcon(int icon) {         this.icon = icon;     } } 
  1. 创建一个自定义适配器,继承自 BaseExpandableListAdapter,用于填充 ExpandableListView
public class NavigationAdapter extends BaseExpandableListAdapter {     private Context context;     private List<NavigationItem> groupList;     private Map<NavigationItem, List<NavigationItem>> childListMap;      public NavigationAdapter(Context context, List<NavigationItem> groupList, Map<NavigationItem, List<NavigationItem>> childListMap) {         this.context = context;         this.groupList = groupList;         this.childListMap = childListMap;     }      // ... 实现 BaseExpandableListAdapter 中的方法 } 
  1. MainActivity 中初始化数据并设置适配器:
public class MainActivity extends AppCompatActivity {     private DrawerLayout drawerLayout;     private ExpandableListView navigationList;     private NavigationAdapter navigationAdapter;      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);          drawerLayout = findViewById(R.id.drawer_layout);         navigationList = findViewById(R.id.navigation_list);          // 初始化数据         List<NavigationItem> groupList = new ArrayList<>();         Map<NavigationItem, List<NavigationItem>> childListMap = new HashMap<>();          NavigationItem group1 = new NavigationItem("Group 1", R.drawable.ic_group_1);         NavigationItem group2 = new NavigationItem("Group 2", R.drawable.ic_group_2);          groupList.add(group1);         groupList.add(group2);          List<NavigationItem> childList1 = new ArrayList<>();         childList1.add(new NavigationItem("Child 1", R.drawable.ic_child_1));         childList1.add(new NavigationItem("Child 2", R.drawable.ic_child_2));          List<NavigationItem> childList2 = new ArrayList<>();         childList2.add(new NavigationItem("Child 3", R.drawable.ic_child_3));         childList2.add(new NavigationItem("Child 4", R.drawable.ic_child_4));          childListMap.put(group1, childList1);         childListMap.put(group2, childList2);          // 设置适配器         navigationAdapter = new NavigationAdapter(this, groupList, childListMap);         navigationList.setAdapter(navigationAdapter);          // 设置点击事件         navigationList.setOnChildClickListener((parent, v, groupPosition, childPosition, id) -> {             // 处理子项点击事件             return false;         });          navigationList.setOnGroupClickListener((parent, v, groupPosition, id) -> {             // 处理分组点击事件             return false;         });     } } 

现在你已经成功地使用 ExpandableListView 实现了一个侧边栏导航。你可以根据需要自定义导航项的样式和行为。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!