2

У меня есть три вкладки (A, B, C), и я хочу добавить домой панель действий на каждой вкладке. Не уверен, что я пропустил здесь, ни одна панель действий не отображается на каждом фрагменте. Ниже показать код фрагмента А.Панель действий не отображается во вкладке

фрагмента А

@Override 
     public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
      inflater.inflate(R.menu.tab_1_menu, menu); 
     } 

@Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
      switch (item.getItemId()) { 
        case R.id.homePage: 
        Intent i=new Intent(getActivity(),Edit.class); 
        startActivity(i); 
      } 
      return super.onOptionsItemSelected(item); 
      } 

tab_1_menu

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:icon="@mipmap/home" 
     android:id="@+id/homePage" 
     android:orderInCategory="100" 
     android:title="Tab" 
     app:showAsAction="always" /> 

</menu> 

TabsFragmentAdapter

public class TabsFragmentPagerAdapter extends FragmentPagerAdapter { 

    public TabsFragmentPagerAdapter(FragmentManager fm) { 
     super(fm); 
     // TODO Auto-generated constructor stub 
    } 

    @Override 
    public Fragment getItem(int index) { 
     // TODO Auto-generated method stub 


     if(index == 0) { 
      Fragment fragment = new A(); 
      Bundle bundle = new Bundle(); 
      bundle.putLong("ID", Edit.ID); 
      fragment.setArguments(bundle); 
      return fragment; 
     } 

     if(index == 1) { 
      Fragment fragment = new B(); 
      Bundle bundle = new Bundle(); 
      bundle.putLong("ID", Edit.ID); 
      fragment.setArguments(bundle); 
      return fragment; 
     } 

     if(index == 2) { 
      Fragment fragment = new C(); 
      Bundle bundle = new Bundle(); 
      bundle.putLong("ID", Edit.ID); 
      fragment.setArguments(bundle); 
      return fragment; 
     } 

     return null; 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return 3; 
    } 

активность

public class ActivityB extends ActionBarActivity implements ActionBar.TabListener { 

    private ViewPager viewPager; 
    private ActionBar actionBar; 
    private TabsFragmentPagerAdapter tabsAdapter; 
    private String[] item = new String[]{"A","B","C"}; 
    private String id; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_b); 
//  id=getIntent().getExtras().getString("ID"); 
     viewPager = (ViewPager) findViewById(R.id.viewPager); 
     tabsAdapter = new TabsFragmentPagerAdapter(getSupportFragmentManager()); 
     viewPager.setAdapter(tabsAdapter); 
     actionBar = getSupportActionBar(); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
     for(int i=0; i<3; i++){ 
      actionBar.addTab(actionBar.newTab().setText(item[i]).setTabListener(this)); 
     } 
     viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

      @Override 
      public void onPageSelected(int arg) { 
       // TODO Auto-generated method stub 
       actionBar.setSelectedNavigationItem(arg); 
      } 

      @Override 
      public void onPageScrolled(int arg0, float arg1, int arg2) { 
       // TODO Auto-generated method stub 

      } 

      @Override 
      public void onPageScrollStateChanged(int arg0) { 
       // TODO Auto-generated method stub 

      } 
     }); 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public void onTabReselected(ActionBar.Tab arg0, FragmentTransaction arg1) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction arg1) { 
     // TODO Auto-generated method stub 
     viewPager.setCurrentItem(tab.getPosition()); 
    } 

    @Override 
    public void onTabUnselected(ActionBar.Tab arg0, FragmentTransaction arg1) { 
     // TODO Auto-generated method stub 

    } 

} 

ответ

1

Во-первых, вам нужно добавить ActionBar к вашей деятельности, которая содержит FragmentPagerAdapter по добавить 2 функции

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
// Inflate the menu; this adds items to the action bar if it is present. 
getMenuInflater().inflate(R.menu. tab_1_menu, menu); 
return true; 
} 

    @Override 
public boolean onOptionsItemSelected(MenuItem item) { 
switch (item.getItemId()) { 
case R.id.homePage: 
Intent i=new Intent(getApplicationContext(),Edit.class); 
startActivity(i); 
} 
return super.onOptionsItemSelected(item); 
} 

Тогда в каждом Fragment

@Override 
public void onCreate(Bundle savedInstanceState) { 
    ... 
    setHasOptionsMenu(true); 
    ... 
} 
@Override 
public void onPrepareOptionsMenu(Menu menu) { 
    menu.findItem(R.id.homePage).setVisible(false); // hide the action bar item 
    menu.findItem(R.id.homePage).setIcon("Your Image"); // change actionbar item icon 
    ... 
    super.onPrepareOptionsMenu(menu); 
} 
+0

TabFragmentAdapter? – John

+1

можете ли вы разместить свой код в TabFragmentAdapter –

+0

, пожалуйста, проверьте ... – John

Смежные вопросы