繁体   English   中英

如何在操作栏的滑动选项卡中具有不同的图标按钮?

[英]How to have different icon button in action bar swipe tab?

我的应用程序中有4个swipe tab 我已经成功在action bar上创建了一个主页图标。 现在,当要进入“工作详细信息”选项卡时,我想在主页图标旁边有一个笔形图标。 我该如何实现? 谢谢。

滑动标签

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 EditInformation();
            Bundle bundle = new Bundle();
            bundle.putString("ID", Edit.ID);
            fragment.setArguments(bundle);
            return fragment;

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

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

        if(index == 3) {
            Fragment fragment = new Edit_Staff_Benefit_ListView();
            Bundle bundle = new Bundle();
            bundle.putString("ID", Edit.ID);
            fragment.setArguments(bundle);
            return fragment;
        }

        return null;
    }

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

}

活动B

public class ActivityB extends ActionBarActivity implements ActionBar.TabListener {

    private ViewPager viewPager;
    private ActionBar actionBar;
    private TabsFragmentPagerAdapter tabsAdapter;
    private String[] item = new String[]{"Information","Work Force","Work Details","Staff Benefit"};
    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<4; 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.tab_1_menu, menu);
        return true;
    }

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

    @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

    }

}

tab_1_菜单

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

我应该在Edit_WorkDetails fragment还是在活动B中添加图标?

首先,在菜单中添加带有visible=false的钢笔图标。

然后,创建一个全局MenuItem变量。

MenuItem mPenIcon;

并在onPrepareOptionMenu方法中

public boolean onPrepareOptionsMenu(Menu menu)
{
    mPenIcon = menu.findItem(R.id.penicon); 
    return true;
}

当您选择要显示笔形图标的标签时,

@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction arg1) {
// TODO Auto-generated method stub
viewPager.setCurrentItem(tab.getPosition());
if(tab.getPosition()==1)//Replace 1 with your tab position
pen.setVisible(true);
}

当未选择标签时,

@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction arg1) {
// TODO Auto-generated method stub
if(tab.getPosition()==1)//Replace 1 with your tab position
pen.setVisible(false);
}

希望这可以帮助 :)

已编辑

我发布的第一种方法不是实际的实现方法。

这是实际的方法。

hasOptioinMenu(true)onCreateViewEdit_WorkFragment

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
                                 @Nullable Bundle savedInstanceState) {
//other codes    
setHasOptionMenu(true);
//other codes
}

并为该片段创建菜单

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.edit_work, menu);
//You should create new menu for Edit_work fragment with both home and pen icons
super.onCreateOptionsMenu(menu, inflater);
}  
@Override public boolean onOptionsItemSelected(MenuItem item) {
}

如您所知,您只想显示特定片段的特定菜单选项。 在这里,我为您提供一种解决方案。

1.将菜单项添加到菜单xml文件ex中。 action_edit

2.将此添加到每个片段的onCreateView()方法中。

setHasOptionsMenu(true);

3,比在每个片段中重写onPrepareOptionsMenu()像这样:

@Override
public void onPrepareOptionsMenu(Menu menu)
{
    super.onPrepareOptionsMenu(menu);
    MenuItem item = menu.findItem(R.id.action_edit);
    if(item != null) {
      item.setVisible(true);
      //in fragment where you want to hide this menu item
      //item.setVisible(false);
    }
}

希望这个能对您有所帮助 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM