2013-08-23 49 views
0

我正在嘗試編寫一個Android應用程序,其中包含幾個不同的項目和一個可以從屏幕左側拖動的drawerlayout。這裏就是我的意思....使用一個DrawerLayout和一個ListView

這是主要的屏幕看起來像什麼: enter image description here

而這裏的抽屜菜單的事情是什麼樣子: enter image description here

我遇到的問題當我打開側面抽屜菜單的東西,並點擊一個選項它不起作用,菜單剛剛關閉。不過,我可以與主列表視圖頁面進行交互。下面是我的代碼如下所示:

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)); 

而且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,但我不知道。

+0

您必須張貼您的draweractivity的全部代碼。 –

回答

2

請發佈您的活動的完整代碼,其中包含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> 

的的FrameLayout content_frame是你的片段保存ListView控件將進入。 只需創建一個包含您在圖片中顯示的ListView並將其插入到「content_frame」中的自定義Fragment(或使用ListFragment)。

使用此替換內容框架內的片段:(當您打開節)你可能片段怎麼看起來像

/** 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); 
} 

一個例子:YourListFragment.java 佈局文件「list_fragment。 xml「只​​包含你想要的任何佈局組件。例如一個ListView。在Fragments的onCreateView()方法中初始化填充ListView。

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; 
    } 
} 

從谷歌的例子全部採取如何創建NavigationDrawer:

http://developer.android.com/training/implementing-navigation/nav-drawer.html

+0

感謝您的快速響應!一個問題雖然...我應該導入android.app.Fragment或android.support.v4.app.Fragment – Plays2

+0

這取決於你想使用你的片段whereelse。至於這個例子,它是保存使用標準的「android.app.Fragment」,而不是支持庫。 –