0

Wie kann ich eine benutzerdefinierte Symbolleiste für jedes Fragment festlegen, wenn ich eine ViewPager verwende? Ich möchte verschiedene Symbole haben, wenn verschiedene Fragmente angezeigt werden. Ich möchte nicht Menu verwenden.Android Swap/Edit Symbolleiste auf der Seite blättern in ViewPager

Ich verwende cheesesquare als Beispiel-App und die activity_main.xml sieht wie folgt aus:

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

Das entsprechende Bit in MainActivity.Java ist dies, wo die ViewPager up mit verschiedenen Fragmenten eingestellt:

Vielleicht kann ich irgendwie ein eindeutiges Symbolleistenlayout angeben (das würde ImageButtons haben, die zum Beispiel die Icons anzeigen) für jedes Fragment und setze jedes irgendwo in der Fragment-Java-Datei (zB auslagern wenn anderes Fragment angezeigt wird)?

EDIT: In meinen anderen Anwendungen, was ich tat, war eine Symbolleiste verwenden, aber dann verstecken/show ImageButtons, die die Symbole angezeigt werden sollen, basierend auf welchem ​​Fragment wurde gezeigt.

<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

Wollen Sie die Änderung der tablayout Symbole, wenn Sie swpie? –

+0

@VereeshCharantimath Nein, die ToolBar, die direkt darüber ist. Normalerweise würden Sie Menüsymbole wie die drei Punkte für Einstellungen sehen. – Micro

+0

Sie möchten also die Symbolleiste bei jedem Wischen ändern? –

Antwort

0

Verwenden Sie die pageChangeListener mit viewPager

Beispielcode ist unten angegeben:

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

     } 

    }); 
Verwandte Themen