0

ActionBarSherlockを使用して、NavigationDrawerを作成しようとしているだけでなく、アクティビティにタブをスライドさせたViewPagerを作成しようとしています。タブがあり、ビュー ページャーとドロワー レイアウトのレイアウトを作成しました。私が持っているのは、viewpager レイアウトと drawerlayout が別々のファイルにあり、ビューを見つけるためにおそらく同じファイルにあるはずだということです。私が持っているコードでこれを行う方法はわかりませんが。

私はこれを行う方法について多くの調査を行いましたが、標準的なパターンはこれを行わないことですが、多くの人が指摘しているように、Google Playミュージックはこれを行います. 私は自分のアプリケーションをそのように見せたいのですが、人々が提案したように回避策があることを知っています。回避策が 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>
4

1 に答える 1

1

まず、Activity には Navigation Drawer と ViewPager の両方がありますが、レイアウトの説明を別の xml ファイルに入れているのを見ました。ただし、Activity には xml ファイルを 1 つだけ配置する必要があります。

これを考えると、「DrawerLayout と ViewPager を同じ xml で宣言するにはどうすればよいか」がポイントになります。順序を間違えると機能しません (私も同じ問題を抱えていたので、警告しています)。したがって、答えは、DrawerLayout をルートとして宣言し、その内部で 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>

答えがお役に立てば幸いです。

于 2014-01-03T10:58:32.270 に答える