2

Das Überlaufmenüsymbol wird in meiner Aktivität nicht mit einem Tabstopp-Navigationslayout angezeigt. Die Registerkarten werden mit einem ViewPager, Fragments und einem TabLayout implementiert.Überlaufmenü wird in einer Aktivität nicht angezeigt, wenn eine Tabstoppnavigation mit TabLayout implementiert wurde

Das Überlaufmenü wird in meinen Aktivitäten angezeigt, die keine Registerkarten haben, die mich denken lassen, dass das Überlaufmenü nicht angezeigt wird, hat etwas mit meiner Implementierung der Registerkartennavigation zu tun.

Hier ist ein Grundmodell meiner Aktivität:

public class MainActivity extends AppCompatActivity { 


TabLayout tabLayout; 
ViewPager viewPager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_layout); 

    initTabLayout(); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_layout, menu); 
    return super.onCreateOptionsMenu(menu); 
} 

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
     return super.onPrepareOptionsMenu(menu); 
} 

public void initTabLayout(){ 

    tabLayout = (TabLayout) findViewById(R.id.tabLayout); 
    tabLayout.setTabTextColors(Color.parseColor("#e3e8e7"), Color.parseColor("#7e7e7e")); 
    viewPager = (ViewPager) findViewById(R.id.viewPager); 
    viewPager.setOffscreenPageLimit(4); //this stops the tabs from losing their data when you change tabs 
    //sets up adapter that contains the scrolling pageAdapter and the fragment which is displayed 
    viewPager.setAdapter(new ActivityTabAdapter(getSupportFragmentManager(), 
      MainActivity.this)); 
    tabLayout.setupWithViewPager(viewPager); 

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

     @Override 
     public void onPageSelected(int position) { 
     } 

     @Override 
     public void onPageScrollStateChanged(int state) { 

     } 
     }); 
      } 
    } 

Und hier ist meine FragmentPagerAdapter Umsetzung:

public class ActivityTabAdapter extends FragmentPagerAdapter { 
    @Override 
    public Parcelable saveState() { 

     return super.saveState(); 
    } 
final int PAGE_COUNT = 4; 
private String tabTitles[] = new String[]{"tab1", "tab2", "tab3", "tab4"}; 
private Context context; 

public ActivityTabAdapter(FragmentManager fm, Context context) { 
    super(fm); 
    this.context = context; 
} 

@Override 
public int getCount() { 
    return PAGE_COUNT; 
} 

@Override 
public Fragment getItem(int position) { 
    return PageFragment.newInstance(position + 1); 
} 

@Override 
public CharSequence getPageTitle(int position) { 
    // Generate title based on item position 
    return tabTitles[position]; 
} 


//These are fragments which hold the layouts of the tabs 
public static class PageFragment extends Fragment { 
    public static final String ARG_PAGE = "ARG_PAGE"; 


    Context mContext; 

    View tab1rootView; 
    View tab2Rootview; 
    View tab3RootView; 
    View tab4RootView; 

    Tab1 tab1; 
    Tab2 tab2; 
    Tab3 tab3; 
    Tab4 tab4; 

    private int mPage; 

    public static PageFragment newInstance(int page) { 
     Bundle args = new Bundle(); 
     args.putInt(ARG_PAGE, page); 
     PageFragment fragment = new PageFragment(); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    MenuInflater mInflater; 
    @Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
       super.onCreateOptionsMenu(menu, inflater); 
     mInflater = inflater; 
     inflater.inflate(R.menu.menu_layout, menu); 
    } 

    @Override 
    public void onPrepareOptionsMenu(Menu menu) { 
     super.onPrepareOptionsMenu(menu); 
     mInflater.inflate(R.menu.menu_layout, menu); 
    } 

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

     setHasOptionsMenu(true); 

     mContext = getActivity(); 


     mPage = getArguments().getInt(ARG_PAGE); 

     Log.v("whichFrag", "" + getArguments().getInt(ARG_PAGE)); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     setHasOptionsMenu(true); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     setHasOptionsMenu(true); 
     tab1rootView = inflater.inflate(R.layout.tab1_layout, container, false); 
     tab2Rootview = inflater.inflate(R.layout.tab2_layout, container, false); 
     tab3RootView = inflater.inflate(R.layout.tab3_layout, container, false); 
     tab4RootView = inflater.inflate(R.layout.tab4_layout, container, false); 
     int i = getArguments().getInt(ARG_PAGE); 


     if (getArguments().getInt(ARG_PAGE) == 1) { //if 1, then we inflate tab1rootView layout 
      tab1 = new Tab1(tab1rootView, getActivity()); 
      tab1.initCardViews1(); 
      return tab1rootView; 
     } else if (getArguments().getInt(ARG_PAGE) == 2) { //if 2, then we inflate tab2Rootview layout 
      tab2 = new Tab2(tab2Rootview, mContext); 
      return tab2Rootview; 
     } else if (getArguments().getInt(ARG_PAGE) == 3) { //if 3, then we inflate tab3RootView layout 
      tab3 = new Tab3(tab3RootView, mContext); 
       return tab3RootView; 
      } else { //if 4, then we inflate tab4RootView layout 
       tab4 = new Tab4(tab4RootView, mContext); 
       return tab4RootView; 
     } 
     } 

     } 
     } 

Hier mein xml-Menü:

<menu 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" 
tools:context="com.example.heavymagikhq.profilepageofficial.profileEditorJava.Profile_info_editor"> 

<item android:id="@+id/action_settings" android:title="@string/action_settings" 
    android:orderInCategory="100" app:showAsAction="never" /> 

<item 
    android:id="@+id/action_settings2" 
    android:orderInCategory="100" 
    android:title="@string/action_settings" 
    app:showAsAction="never" 
    android:visible="true" /> 

<item 
    android:id="@+id/action_settings1" 
    android:orderInCategory="100" 
    android:title="@string/action_settings" 
    android:icon="@drawable/ic_action_menu" 
    app:showAsAction="never" 
    android:visible="true" /> 
</menu> 

ich ausgesehen haben bei anderen Antworten auf Stackoverflow konnte ich aber die Antwort nicht finden.

Ich werde weitere Informationen veröffentlichen, wenn Sie es brauchen.

Vielen Dank im Voraus.

+0

überprüfen Sie diesen Link: http://Stackoverflow.com/questions/19750635/icon-in-menu-not-showing-in-android –

+0

Danke, ich werde es überprüfen –

+0

set app: showAsAction = "immer" –

Antwort

2

Okay, also habe ich es herausgefunden und die Antwort ist einfach. Ich musste setHasOptionsMenu(true); in keiner der Phasen des Lebenszyklus der Fragmente verwenden, und Sie müssen meiner Erfahrung nach app: showAsAction = "nie" als XML-Attribut auf Ihrem mindestens einen Ihrer XML-Menüelemente haben.

Wenn Sie AppCompatActivity in der Aktivität sind erstreckt, die die TabLayout implementiert und Sie sind auch eine Toolbar in dieser Aktion dann einen Verweis auf Ihre Toolbar erhalten mit und this.setSupportActionBar(toolbar);, während Sie im Toolbar als Parameter übergeben.

Es sollte wie so aussehen:

Toolbar toolbar = (Toolbar) findViewById(R.id.editProfileToolbar); 
     this.setSupportActionBar(toolbar); 

Und nennen dies in der onCreate() -Methode Ihrer Aktivität.

0

Try setHasOptionsMenu-Oncreate() Methode des Fragments zu bewegen und verwendet nur once.Also nicht das Menü twice.Inflate aufblasen einmal in OncreateOptionsMenu() und die Sichtbarkeit der Elemente in OnPrepareOptionsMenu() statt wieder aufblasen ändern.

+0

Ich werde das versuchen, aber ich habe das Problem auf eine andere Weise gelöst –

+0

Dies schien nicht das Problem für mich zu lösen, aber danke für deine Eingabe. Außerdem habe ich das Menü in der onPrepareOptionsMenu() -Methode aufgebläht, weil ich verschiedene Lösungen ausprobierte, aber es war schließlich nicht notwendig, die onPrepareOptionsMenu() überhaupt zu überschreiben, um das Überlaufmenü zu erhalten, das in meinem Fall angezeigt wird –