2013-07-22 94 views
1

我正在使用android Navigation Drawer,通過它們的文檔,它看起來像抽屜只能擴展片段活動,以便從我所有的活動中打開抽屜,我需要完成所有活動一個片段,這不是一個可行的解決方案。從活動類中打開Android導航抽屜

有沒有一種方法可以打開抽屜,從活動中擴展FragmentActivity?

當我嘗試從Activity類擴展我的抽屜活動,以及另一個將打開擴展draweractivity類(此處爲SlideMenuActivity)的抽屜的活動時,該應用程序崩潰,返回NullPointerException。

下面是打開抽屜佈局的代碼,但一旦第一次活動啓動,我無法訪問抽屜。

應用上syncState點轟然onPostCreate方法

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onPostCreate(savedInstanceState); 
    getActionDrawerToggle().syncState(); 
} 

public class SlideMenuActivity extends FragmentActivity implements OnItemClickListener 


{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     setDrawerLayout(); 
     setDrawerList(); 
     if (savedInstanceState == null) 
     { 
      getDrawerListView().setSelectionAfterHeaderView(); 
      getDrawerListView().setSelection(1); 
      selectItem(1); 
     } 
    } 
// 
// @Override 
// public void setContentView(int layoutResID) { 
//  // TODO Auto-generated method stub 
//  super.setContentView(layoutResID); 
// } 

    private DrawerLayout getDrawerView() 
    { 
     return (DrawerLayout)findViewById(R.id.drawer_layout); 
    } 

    private ListView getDrawerListView() 
    { 
     return (ListView) findViewById(R.id.left_drawer); 
    } 

    private ActionBarDrawerToggle getActionDrawerToggle() 
    { 
     ActionBarDrawerToggle drawerToggle=new ActionBarDrawerToggle(
       this,     /* host Activity */ 
       getDrawerView(),   /* DrawerLayout object */ 
       R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */ 
       R.string.drawer_open, /* "open drawer" description for accessibility */ 
       R.string.drawer_close /* "close drawer" description for accessibility */ 
       ) { 
      @Override 
      public void onDrawerClosed(View view) { 
       super.onDrawerClosed(view); 
      } 

      @Override 
      public void onDrawerOpened(View view) { 
       super.onDrawerOpened(view); 
      } 
     }; 
     return drawerToggle; 
    } 

    private void setDrawerLayout(){ 
     // set a custom shadow that overlays the main content when the drawer opens 
     getDrawerView().setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.RELATIVE_HORIZONTAL_GRAVITY_MASK); 
     // enable ActionBar app icon to behave as action to toggle navigation drawer 
     getDrawerView().setDrawerListener(getActionDrawerToggle()); 

    } 

    /** 
    * Set up the drawer's list view with items and click listener 
    */ 
    private void setDrawerList() 
    { 
     ImageView imageView=new ImageView(this); 
     imageView.setImageDrawable(getResources().getDrawable(R.drawable.precision_logo)); 
     CustomBaseAdapter adapter=new CustomBaseAdapter(); 
     adapter.list=getListViewData(); 
     adapter.context=this; 
     ListView drawerList=getDrawerListView(); 
     drawerList.setHeaderDividersEnabled(true); 
     drawerList.addHeaderView(imageView, null, false); 
     drawerList.setScrollingCacheEnabled(false); 
     drawerList.setAdapter(adapter); 
     drawerList.setOnItemClickListener(this); 

    } 

    private void selectItem(int position){ 

     // update the main content by replacing fragments 

//  Fragment fragment=null; 
//  FragmentManager manager=getSupportFragmentManager(); 
     switch (position) { 
     case 1: 
      this.startActivity(new Intent(this,SavedTankListActivity.class)); 
//   fragment = new SavedMixesFragment(); 
//   fragment = new SavedTankListActivity(); 
//   manager.beginTransaction().replace(R.id.content_frame, fragment).commit(); 
      break; 

     case 2: 
//   fragment=new MixGuideFragment(); 
//   manager.beginTransaction().replace(R.id.content_frame, fragment).commit(); 
      break; 

     default: 
//   fragment = new SavedMixesFragment(); 
//   manager.beginTransaction().replace(R.id.content_frame, fragment).commit(); 

      break; 
     } 

     getDrawerView().closeDrawer(getDrawerListView()); 

    } 

    @Override 
    protected void onPostCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onPostCreate(savedInstanceState); 
     getActionDrawerToggle().syncState(); 
    } 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
     // TODO Auto-generated method stub 
     super.onConfigurationChanged(newConfig); 
     getActionDrawerToggle().onConfigurationChanged(newConfig); 
    } 

    private ArrayList<DrawerListModel> getListViewData() 
    { 
     ArrayList<DrawerListModel> listViewData=new ArrayList<DrawerListModel>(); 
     String[] listItemArray=getResources().getStringArray(R.array.slide_bar_list_item_array); 
     for(int index=0;index<listItemArray.length;index++) 
     { 
      DrawerListModel model=new DrawerListModel(); 
      model.listItem=listItemArray[index]; 
      listViewData.add(model); 
     } 
     return listViewData; 
    } 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position,long id) 
    { 
     view.setSelected(true); 
     selectItem(position); 
    } 

    public void openDrawerList(View view){ 
     getDrawerView().openDrawer(getDrawerListView()); 
    } 
} 

回答

0

據稱可以讓你把導航抽屜,所有的子活動課,讓使用抽屜一個主要活動,但我不明白是如何避免重複包含所有子活動的抽屜的佈局。

0

導航抽屜不需要在片段中。您可以創建一個班級,然後從您的所有活動中擴展(正如您試圖做的那樣)。

public class SlideMenuActivity extends Activity{..} 

您的主要活動會是什麼樣子

public class MainActivity extends SlideMenuActivity{..} 

的SlideMenuActivity可以以同樣的方式在creating a navigation activity描述來實現。

您所有的XML頁面將包括這樣的:

<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" 
android:background="#FFFFFF" > 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

</LinearLayout> 

<ListView 
    android:id="@+id/left_drawer" 
    android:layout_width="240dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:background="#111" 
    android:choiceMode="singleChoice" 
    android:divider="#CCCCCC" 
    android:dividerHeight="1dp" /> 

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

沒有看到你的logcat的輸出,我不知道爲什麼會收到一個錯誤,但希望這可以幫助你通過一個多一點的獲得導航抽屜代碼。

1

我也正在瀏覽文檔,並認爲我不得不將所有活動切換爲片段。只是爲了清除它,情況根本不是這樣。您可以在線性佈局下有任意數量的元素,或者根據需要添加任何元素

例如,如果沒有appdrawer你的基本活動是:

<RelativeLayout> 
    <TextView> 
    </TextView> 
    <Button> 
    <Button> 
</RelativeLayout> 

根本就

<android.support.v4.widget.DrawerLayout> 

    <RelativeLayout> 
     <TextView> 
     </TextView> 
     <Button> 
     <Button> 
    </RelativeLayout> 

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