如何将ListView包含到导航抽屉中?

时间:2014-07-23 14:17:56

标签: android android-layout listview android-listview

我试图将listView包含在导航抽屉中,但是当我启动应用程序时,listView不会出现在抽屉中,但在主界面中我无法找到问题请帮助我!

Java代码:

    package com.example.anb_calculator;

    import java.util.ArrayList;
    import java.util.List;

    import android.app.Fragment;
    import android.app.FragmentManager;
    import android.os.Bundle;
    import android.support.v4.app.ActionBarDrawerToggle;
    import android.support.v4.widget.DrawerLayout;
    import android.support.v7.app.ActionBarActivity;
    import android.view.Gravity;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;



    public class HomeFinanceActivity extends ActionBarActivity {
    private DrawerLayout drawerLayout;
    private ActionBarDrawerToggle drawerToggle;
    ListView liste = null;




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

    // l'ajout du navigation drawer
     drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);
     drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.drawable.ic_drawer,               R.string.drawer_open, R.string.drawer_close);
     drawerLayout.setDrawerListener(drawerToggle);
     drawerToggle.setDrawerIndicatorEnabled(true);
     getSupportActionBar().setDisplayHomeAsUpEnabled(true);
     getSupportActionBar().setHomeButtonEnabled(true); 
     drawerToggle.syncState();


        //*************************/
    String[] values = new String[] { "Overview","Car Finance","Home Finance","Personal Finance"};
     liste = (ListView) findViewById(R.id.listView);
     List<String> exemple = new ArrayList<String>();
     exemple.add("Overview");
     exemple.add("Home Finance");
     exemple.add("Car Finance");
     exemple.add("Personal Finance");
     exemple.add("Credit Cards");

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, exemple);
     liste.setAdapter(adapter);
     //liste.setOnItemClickListener(new DrawerItemClickListener());

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.home_finance, menu);
    return true;
}
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
if(android.R.id.home == item.getItemId()) {
    if (drawerLayout.isDrawerOpen(Gravity.LEFT) == false) {
        drawerLayout.openDrawer(Gravity.LEFT);

    }
    else {
        drawerLayout.closeDrawers();
    }
}

return super.onOptionsItemSelected(item);
 }

 }

XML代码:

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

   <RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context="com.example.anb_calculator.HomeFinanceActivity" 
    android:background="@drawable/planplan">


   <TextView
   android:id="@+id/home_finance" 
   android:layout_width="fill_parent"
   android:layout_height="wrap_content" 
   android:text="@string/home_finance"
   android:paddingBottom="@dimen/small_padding"
    android:gravity="center"
   android:textColor="@color/black"
   android:textStyle="bold"
  android:textSize="@dimen/large_size"

   />
 </RelativeLayout>
  <FrameLayout
    android:id="@+id/frame_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
 <TextView
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:layout_gravity="left"
    android:text="This is a navigation drawer"
    android:background="@color/black"
    android:textColor="@color/blue"
    />

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

          >
   </ListView>


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

2 个答案:

答案 0 :(得分:0)

DrawerLayout的{​​{3}}包含问题的解决方案:

  

要使用DrawerLayout,请将主要内容视图定位为第一个   宽度和高度为match_parent的子节点。添加抽屉作为孩子   主要内容视图后的视图并设置layout_gravity   适当。抽屉通常使用match_parent作为高度   固定宽度。

因此,除第一个之外的View的任何子DrawerLayout都被解释为抽屉。 layout_gravity确定drawer的位置以及从哪个方向滑动。

所以你的问题是:

  1. DrawerLayout中有两个以上的孩子(不知道你是否想要那个,会创建多个抽屉)。
  2. 您尚未相应地设置layout_gravity

  3. 要修复它,你只需要修复你的布局!尝试这样的事情:

    <?xml version="1.0" encoding="utf-8"?>
    <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 -->
        <RelativeLayout
                android:id="@+id/rlFragmentContainer"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
    
            <!-- Content goes here!!!!!!1 -->
    
        </RelativeLayout>
    
        <!-- The navigation drawer -->
        <ListView android:id="@+id/lvDrawer"
                  android:layout_width="240dp"
                  android:layout_height="match_parent"
                  android:layout_gravity="start"/>
    
    </android.support.v4.widget.DrawerLayout>
    

    此处唯一非常重要的部分是layout_gravity的{​​{1}}设置为ListView。这意味着您可以从左侧start滑动。

答案 1 :(得分:-1)

您必须将ListView放入DrawerLayout:

drawerLayout.addView(liste);

说它是否有效:)