【问题标题】:ListView to ExpandableListView in NavigationDrawerNavigationDrawer 中的 ListView 到 ExpandableListView
【发布时间】:2015-09-26 15:50:57
【问题描述】:

我想将ExpandableListView 添加到NavigationDrawer。目前就在ListView。我该怎么做才能进入ExpandableListView

下面我已经包含了主activity文件和xml文件。

MainActivity.java

package com.example.ayush.yaido;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.widget.Toolbar;
import android.support.v7.app.ActionBar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem; 
import android.widget.ListView;
import java.util.ArrayList;


public class MainActivity extends ActionBarActivity implements AdapterView.OnItemClickListener {

private ActionBarDrawerToggle actionBarDrawerToggle;
private Toolbar toolbar;
private ActionBar actionBar;
private DrawerLayout drawerLayout;
private ListView navList;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    toolbar = (Toolbar)findViewById(R.id.app_bar);
    setSupportActionBar(toolbar);
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    navList = (ListView) findViewById(R.id.navlist);
    ArrayList<String> navArray = new ArrayList<String>();
    navArray.add("Home");
    navArray.add("Fragment1");
    navArray.add("Fragment2");
    navList.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_activated_1, navArray);
    navList.setAdapter(adapter);
    navList.setOnItemClickListener(this);
    actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.opendrawer, R.string.closedrawer);
    drawerLayout.setDrawerListener(actionBarDrawerToggle);
    actionBar = getSupportActionBar();
    actionBar.setDisplayShowHomeEnabled(true);
    actionBar.setDisplayHomeAsUpEnabled(true);
    loadSelection(0);
}

private void loadSelection(int i) {
    navList.setItemChecked(i, true);
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    actionBarDrawerToggle.syncState();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    } else if (id == android.R.id.home) {
        if (drawerLayout.isDrawerOpen(navList)) {
            drawerLayout.closeDrawer(navList);
        } else {
            drawerLayout.openDrawer(navList);
        }
    }

    return super.onOptionsItemSelected(item);
}

@Override
public boolean onContextItemSelected(MenuItem item) {
    return super.onContextItemSelected(item);
}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    switch (position) {
        case 0:

            break;
        case 1:

            break;

        case 2:

            break;
    }
    drawerLayout.closeDrawer(navList);
}
}

activity_main.xml

<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">

<include
    android:id="@+id/app_bar"
    layout="@layout/app_bar"/>
<android.support.v4.widget.DrawerLayout

android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">

<FrameLayout
android:id="@+id/fragmentholder"
android:layout_width="match_parent"
android:layout_height="match_parent">


</FrameLayout>

<ListView
android:id="@+id/navlist"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="#dedede"
android:choiceMode="singleChoice"
android:divider="@android:color/black"
android:dividerHeight="1dp"
android:indicatorRight="440dp"></ListView>


</android.support.v4.widget.DrawerLayout>
</LinearLayout>

app_bar.xml

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/primaryColor"
app:theme="@style/ThemeOverlay.AppCompat.Light">

</android.support.v7.widget.Toolbar>

谢谢。

【问题讨论】:

    标签: java android listview layout expandablelistview


    【解决方案1】:

    希望您使用的是最新的设计支持库。如果这样做,则不需要将列表视图附加到导航抽屉,而是可以在 DrawerLayout 中使用以下 xml

    <android.support.design.widget.NavigationView android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:headerLayout="@layout/drawer_header" app:menu="@menu/drawer"/>

    您可以使用 headerLayout 定义抽屉标题,使用 app:menu 定义菜单。您可以在子标题上参考以下链接,在您的情况下可扩展菜单。

    http://android-developers.blogspot.com/2015/05/android-design-support-library.html

    【讨论】:

    • 那么通过xml做事只能实现展开列表?
    【解决方案2】:

    ExpandableListViews 比普通的列表视图要实现更多的工作——以下是您正在查看的内容的一个想法:

    1. 将 ListView 类型更改为 ExpandableListView

    2. 您需要将适配器更改为 BaseExpandableListAdapter。这是最难的部分,有很多方法,如 getChildView、getChilViewcount 等,您必须实现。

    3. 您需要更改存储数据的方式。你有你的数据作为一个数组,但是如果 ExpandableListView 要求你提供第 5 组,第 3 组,你要给它提供数组的什么元素?考虑实现一组列表、节点或类似的东西来保存您的数据。

    这是您需要执行的操作的一般概述。这是一个指南链接,可帮助您入门:

    http://www.androidhive.info/2013/07/android-expandable-list-view-tutorial/

    【讨论】:

      猜你喜欢
      • 2013-08-13
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多