android - 选项卡中不显示操作栏

标签 android android-fragments tabs android-actionbar android-tabhost

我有三个选项卡(A、B、C),我想在每个选项卡上添加一个主页 操作栏。不确定我在这里错过了什么,每个 fragment 上都没有显示操作栏。下面显示 fragment A的代码。

fragment A

  @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;
    }

Activity

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

    }

}

最佳答案

首先,您需要通过添加 2 个函数将 ActionBar 添加到包含 FragmentPagerAdapter 的 Activity

@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);
}

关于android - 选项卡中不显示操作栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34427598/

相关文章:

Android ImageView 通过 ImageView OnTouchListener

android - 为什么 canvas 和 onDraw 中的 view 大小不一样? (安卓)

android - 在 Android 中使用 fragment 时处理后退

java - TabListener 不起作用

android - 更改 Android JellyBean 上的操作栏高度

java - 如果 fragment 事务未完成,应用程序就会崩溃

Android Studio 自定义模板

android - 在fragment中添加ProgressBar Webview

android - 刷新 ViewPager fragment 无法正常工作

java - JTabbedPane - 未创建内容