2016-02-05 119 views
1

我刚刚创建了一个有DrawerLayout的布局,里面有工具栏,tablayout和viewpager。然而,在tablayout中,这些标签在点击时没有响应,而是在刷卡时发生变化。下面是代码:Android:TabLayout无法响应点击

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:id="@+id/drawer" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true" 
tools:context=".activities.HomeActivity"> 

<LinearLayout 
    android:id="@+id/main_layout" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:orientation="vertical"> 
    <!-- Content for screen without action bar--> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:background="@color/theme_color" 
     android:elevation="6dp" 
     android:minHeight="?attr/actionBarSize" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> 

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

     <android.support.design.widget.TabLayout 
      android:id="@+id/tab_layout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/toolbar" 
      android:background="@color/theme_color" 
      android:elevation="6dp" 
      android:minHeight="?attr/actionBarSize" 
      app:tabIndicatorColor="@color/sub_theme_color" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 

     <View 
      android:layout_width="match_parent" 
      android:layout_height="4dp" 
      android:background="@drawable/toolbar_shadow" /> 

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

    </FrameLayout> 


</LinearLayout> 

<android.support.design.widget.NavigationView 
    android:id="@+id/navigation_view" 
    android:layout_height="match_parent" 
    android:layout_width="wrap_content" 
    android:layout_gravity="start" 
    app:headerLayout="@layout/header_navigation_drawer" 
    app:menu="@menu/menu_drawer_links" 
    /> 

而且在MainActivity.java

private Toolbar toolbar; 
private NavigationView navigationView; 
private DrawerLayout drawerLayout; 

// Initializing Toolbar and setting it as the actionbar 
    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    //Intializing tab-layout and viewpager for tabs 
    TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); 
    tabLayout.addTab(tabLayout.newTab().setText("Tasks")); 
    tabLayout.addTab(tabLayout.newTab().setText("Updates")); 
    tabLayout.addTab(tabLayout.newTab().setText("Redeem")); 
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 

    // Initializing viewpager to hold the tab-layout 
    final ViewPager viewPager = (ViewPager) findViewById(R.id.pager); 
    final PagerAdapter adapter = new PagerAdapter 
      (getSupportFragmentManager(), tabLayout.getTabCount()); 
    viewPager.setAdapter(adapter); 
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 


    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      viewPager.setCurrentItem(tab.getPosition()); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 

     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 

     } 
    }); 

现在这里是怪异的一部分:它是在棒棒糖点击,但没有在棒棒糖预览版工作。

+0

考虑使用[ViewPagerOnTabSelectedListener](http://developer.android.com/intl/es/reference/android/support/design/widget/ TabLayout.ViewPagerOnTabSelectedListener.html)。它已经实现了所有使用ViewPager的回调。 'tabLayout.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager))'。 – thetonrifles

回答

2

您可以通过检查XML页面的“设计”选项卡中的布局视图轻松解决此问题。最好将tablayout和viewpager放在一个相关布局中。

活动很好。

这里是校正XML:

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true" 
android:orientation="vertical"> 


<android.support.v4.widget.DrawerLayout 
    android:id="@+id/drawer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context=".activities.HomeActivity"> 

    <LinearLayout 
     android:id="@+id/main_layout" 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_height="match_parent" 
     android:layout_width="match_parent" 
     android:orientation="vertical"> 
     <!-- Content for screen without action bar--> 

     <!-- Move toolbar above drawerlayout so that on opening drawer, it is visible --> 
     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:background="@color/theme_color" 
      android:elevation="6dp" 
      android:minHeight="?attr/actionBarSize" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> 

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

       <RelativeLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"> 

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

        <android.support.design.widget.TabLayout 
         android:id="@+id/tab_layout" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:background="@color/theme_color" 
         android:elevation="6dp" 
         android:minHeight="?attr/actionBarSize" 
         app:tabIndicatorColor="@color/sub_theme_color" 
         android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/> 

        <View 
         android:id="@+id/shadow_toolbar" 
         android:layout_width="match_parent" 
         android:layout_height="4dp" 
         android:background="@drawable/toolbar_shadow" /> 

       </RelativeLayout> 

     </FrameLayout> 


    </LinearLayout> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/navigation_view" 
     android:layout_height="match_parent" 
     android:layout_width="wrap_content" 
     android:layout_gravity="start" 
     app:headerLayout="@layout/header_navigation_drawer" 
     app:menu="@menu/menu_drawer_links" 
     /> 
</android.support.v4.widget.DrawerLayout>