0

我想創建一個NavigationDrawer以及在使用ActionBarSherlock的活動中使用滑動選項卡的ViewPager。我有選項卡,我已經爲視圖尋呼機和抽屜佈局創建了佈局。我知道我擁有的是viewpager佈局和drawerlayout是在單獨的文件中,他們應該可能在同一個文件中查找視圖。雖然我不知道如何用我擁有的代碼來做到這一點。NavigationDrawer和ViewPager在Android中的同一活動中

我已經做了大量的研究,關於如何做到這一點,標準模式是不這樣做,雖然很多人指出,谷歌播放音樂做到這一點。我希望我的應用程序看起來像這樣,並且我知道有人提出了一種解決方法。我只是不確定該解決方法如何與ActionBarSherlock和我目前實現的代碼一起工作。請任何人都可以幫助我。先謝謝你。

這裏是我的活動代碼:

public class SlidingTabsActivity extends SherlockFragmentActivity 
{ 
private ViewPager viewPager; 
private TabsAdapter tabsAdapter; 
private ActionBar actionBarTabs; 

/* Navigation drawer */ 
private DrawerLayout drawerLayout; 
private ListView drawerListView; 
private ActionBarDrawerToggle drawerToggle; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    viewPager = new ViewPager(this); 
    viewPager.setId(R.id.pager); 
    setContentView(viewPager); 

    /* Navigation Drawer */ 
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawerListView = (ListView) findViewById(R.id.left_drawer); 

    System.out.println("Drawer Layout test:" + drawerLayout.getId()); 

    drawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 
    drawerListView.setAdapter(new ArrayAdapter<String>(this, R.layout.navigation_drawer_list_item, R.array.navigation_drawer_list)); 
    drawerListView.setOnItemClickListener(new OnItemClickListener() 
    { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) 
     { 
      // TODO Auto-generated method stub 

     } 
    }); 

    actionBarTabs = getSupportActionBar(); 
    actionBarTabs.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    actionBarTabs.setDisplayHomeAsUpEnabled(true); 
    actionBarTabs.setHomeButtonEnabled(true); 

    drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) 
    { 
     public void onDrawerClosed(View view) 
     { 
      invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
     } 

     public void onDrawerOpened(View drawerView) 
     { 
      invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
     } 
    }; 
    drawerLayout.setDrawerListener(drawerToggle); 

    tabsAdapter = new TabsAdapter(this, viewPager); // Declares the tabs adapter class with the view pager view 

    /* Adds fragments to the tabs adapter */ 
    tabsAdapter.addTab(actionBarTabs.newTab().setText("PV"), Fragment_1.class, null); 
    tabsAdapter.addTab(actionBarTabs.newTab().setText("CONFIG"), Fragment_2.class, null); 
    tabsAdapter.addTab(actionBarTabs.newTab().setText("DIAG"), Fragment_3.class, null); 
} 

這裏是我的DrawerLayout佈局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"> 

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

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

這裏是我的ViewPager佈局XML代碼:

<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" 
    tools:context=".SlidingTabsActivity" > 

<android.support.v4.view.ViewPager 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/pager" /> 

</RelativeLayout> 

回答

1

首先,你的Activity有Navigation Drawer和ViewPager,但是我看到你把佈局描述放在了不同的位置t xml文件。但是,您必須只爲您的活動放置一個xml文件。

考慮到這一點,現在的關鍵點是:「如何在同一個xml中聲明DrawerLayout和ViewPager?」。如果你輸入了錯誤的順序,它將不起作用(我有這個相同的問題,這就是爲什麼我提醒你)。所以,答案是將DrawerLayout聲明爲root,並在其內部,ViewPager中,然後在關閉ViewPager「標籤」後,聲明DrawerLayout的ListView。

一個例子:

<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.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
</android.support.v4.view.ViewPager> 

<ListView android:id="@+id/drawer_list" 
    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> 

我希望答案可以幫助您。

相關問題