0

Как настроить пользовательскую панель инструментов для каждого фрагмента, когда я использую ViewPager? Я хочу иметь разные значки при отображении разных фрагментов. Я не хочу использовать Menu.Панель инструментов Android Swap/Edit на странице прокрутки в ViewPager

Я использую cheesesquare в качестве примера приложения и activity_main.xml выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/main_content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
      app:layout_scrollFlags="scroll|enterAlways|snap" /> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="end|bottom" 
     android:layout_margin="@dimen/fab_margin" 
     android:src="@drawable/ic_check_black_24dp" 
     android:tint="@color/white"/> 

</android.support.design.widget.CoordinatorLayout> 

Соответствующий бит MainActivity.Java это, где ViewPager устанавливается с различными фрагментами:

private void setupViewPager(ViewPager viewPager) { 
     Adapter adapter = new Adapter(getSupportFragmentManager()); 
     adapter.addFragment(new CheeseListFragment(), "Cheese"); 
     adapter.addFragment(new AnotherFragment(), "Another"); 
     adapter.addFragment(new SomeOtherFragment(), "Some Other"); 
     viewPager.setAdapter(adapter); 
    } 

Может быть, я могу как-то указать уникальный макет панели инструментов (который будет иметь ImageButtons, отображающий значки, например) для каждого фрагмента и установить каждый из них где-нибудь в файле фрагмента java (например, поменяйте их, когда будет показан другой фрагмент)?

EDIT: В моих других приложений, что я сделал, использовать одну панель инструментов, но затем скрыть/показать ImageButtons, который будет отображать значки, основанные на том, что фрагмент был показан.

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appBarLayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     app:popupTheme="@style/AppTheme.PopupOverlay"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:gravity="right" 
      android:orientation="horizontal"> 

      <TextView 
       android:id="@+id/toolbarTitleTextView" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Title" 
       android:layout_gravity="center" 
       android:singleLine="true" 
       android:ellipsize="end" 
       android:textSize="20sp" 
       android:textColor="#fff" 
       android:fontFamily="sans-serif-medium" 
       /> 

      <View 
       android:id="@+id/clearView" 
       android:layout_width="0dp" 
       android:layout_height="0dp" 
       android:layout_weight="1" /> 

      <ImageButton 
       android:id="@+id/editButton" 
       android:layout_width="48dp" 
       android:layout_height="48dp" 
       android:layout_gravity="center_vertical" 
       android:layout_marginRight="16dp" 
       android:scaleType="fitCenter" 
       android:padding="8dp" 
       android:background= 
        "?attr/selectableItemBackgroundBorderless" 
       android:contentDescription="Post" 
       android:src="@drawable/ic_mode_edit_24dp" 
       android:tint="@color/white" 
       /> 

     </LinearLayout> 

    </android.support.v7.widget.Toolbar> 

</android.support.design.widget.AppBarLayout> 
+0

вы хотите, чтобы изменить значки tablayout когда вы swpie? –

+0

@VeereshCharantimath Нет, ToolBar, который находится над ним. Где вы обычно видите значки меню, такие как три точки для настроек. – Micro

+0

Итак, вы хотите менять панель инструментов каждый раз, когда вы садитесь? –

ответ

0

Используйте pageChangeListener с ViewPager

пример кода приведен ниже:

 viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
     @Override 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

     } 

     @Override 
     public void onPageSelected(int position) { 
      if (position == 1) { 
       Log.d("Page 1", "Pressed"); 
       //set Image Button Visibility Gone or visible according to your requirement, tab 1 pressed 

      } 
    else if (position == 2) { 
       Log.d("Page 2", "Pressed"); 
       //set Image Button Visibility Gone or visible according to your requirement, tab 1 pressed 

      } 
    else { 
       Log.d("Other Pages", "Pressed"); 

      } 

     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 

    }); 
Смежные вопросы