Java 将抽屉布局与列表视图一起使用

Java 将抽屉布局与列表视图一起使用,java,android,listview,drawerlayout,Java,Android,Listview,Drawerlayout,我正在尝试编写一个android应用程序,其中包含一些不同项目的列表视图,还有一个抽屉布局,可以从屏幕左侧拖动。我的意思是 这是主屏幕的外观: 下面是抽屉菜单的样子: 我遇到的问题是,当我打开侧抽屉菜单并点击一个选项时,它不工作,菜单就关闭了。但是,我能够与主listview页面交互。我的代码是这样的: String[] homeArray = { "Test", "Test", "Test", "Test", "Test", "Test", "Test", "Test", "Test",

我正在尝试编写一个android应用程序,其中包含一些不同项目的列表视图,还有一个抽屉布局,可以从屏幕左侧拖动。我的意思是

这是主屏幕的外观:

下面是抽屉菜单的样子:

我遇到的问题是,当我打开侧抽屉菜单并点击一个选项时,它不工作,菜单就关闭了。但是,我能够与主listview页面交互。我的代码是这样的:

String[] homeArray = { "Test", "Test", "Test", "Test", "Test", "Test", "Test", "Test", "Test", "Test", "Test", "Test", "Test", "Test", "Test" };

private ListView homeListView;
private ArrayAdapter arrayAdapter;



private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;

private CharSequence mDrawerTitle;
private CharSequence mTitle;
private String[] mDrawerTitles;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    mTitle = mDrawerTitle = getTitle();
    mDrawerTitles = getResources().getStringArray(R.array.Menu);
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.left_drawer);

    // Set the adapter for the list view
    mDrawerList.setAdapter(new ArrayAdapter<String>(this,
            R.layout.drawer_list_item, mDrawerTitles));
String[]homeArray={“测试”、“测试”、“测试”、“测试”、“测试”、“测试”、“测试”、“测试”、“测试”、“测试”、“测试”、“测试”、“测试”、“测试”、“测试”};
私有列表视图homeListView;
专用阵列适配器阵列适配器;
私人抽屉布局mDrawerLayout;
私有列表视图mDrawerList;
私有操作bardrawertoggle mDrawerToggle;
私有字符序列mDrawerTitle;
私有字符序列mTitle;
私有字符串[]mDrawerTitles;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTitle=mDrawerTitle=getTitle();
mdrawertiles=getResources().getStringArray(R.array.Menu);
mDrawerLayout=(抽屉布局)findViewById(R.id.抽屉布局);
mDrawerList=(ListView)findViewById(R.id.left\u抽屉);
//设置列表视图的适配器
mDrawerList.setAdapter(新阵列适配器,
R.layout.drawer_list_item,MDraweritles);
以及activity_main.xml:

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    >

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

<ListView
    android:id="@+id/left_drawer"
    android:layout_height="match_parent"
    android:layout_width="240dp"
    android:layout_gravity="start"
    android:choiceMode="singleChoice"
    android:divider="@android:color/darker_gray"
    android:dividerHeight="1dp"
    android:background="#111"
    />
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical"
              tools:context=".ListActivity" >

<ListView
        android:id="@+id/homeListView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
</ListView>

</LinearLayout>

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


我感觉问题出在xml中,但我不确定。

请发布包含NavigationDrawer的活动的完整代码

此外,我强烈建议(谷歌也一样)您在各个NavigationDrawer部分中使用片段(“设置”、“提交错误”和“帮助”)

不要将所有布局组件放入活动的布局文件。

因此,布局应如下所示:

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!-- The main content view -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <!-- The navigation drawer -->
    <ListView android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"
        android:background="#111"/>
</android.support.v4.widget.DrawerLayout>
片段的外观示例:YourListFragment.java 布局文件“list_fragment.xml”只包含您想要的任何布局组件。例如,ListView.Initialize在Fragments onCreateView()方法中填充ListView

所有内容摘自谷歌关于如何创建NavigationDrawer的示例:


您必须发布您的draweractivity的完整代码。感谢您的快速响应!但有一个问题…我应该导入android.app.Fragment还是android.support.v4.app.Fragment,这取决于您希望在何处使用您的片段。对于此示例,它是保存为使用标准的“android.app.Fragment”,而不是支持库。
/** Swaps fragments in the main content view */
private void selectItem(int position) {
    // Create a new fragment and specify the planet to show based on position
    Fragment fragment = new YourListFragment(); // this fragment contains the list with all the "test" items

    // Insert the fragment by replacing any existing fragment
    FragmentManager fragmentManager = getFragmentManager();
    fragmentManager.beginTransaction()
                   .replace(R.id.content_frame, fragment)
                   .commit();

    // Highlight the selected item, update the title, and close the drawer
    mDrawerList.setItemChecked(position, true);
    setTitle(mPlanetTitles[position]);
    mDrawerLayout.closeDrawer(mDrawerList);
}
public class YourListFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.list_fragment, container, false);

        return rootView;
    }
}