1

我有一个日历应用程序。我正在使用 ActionBarSherlock 和 Tabs。我还在操作栏中实现了选项菜单。我希望操作栏中的一个菜单项在选择选项卡时表现不同。

如何在onOptionsItemSelected(MenuItem item)方法中获取选项卡位置,以便可以相应地对菜单项进行编码?

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

    ActionBar bar = getSupportActionBar();
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    ActionBar.Tab Tab1 = bar.newTab();
    ActionBar.Tab Tab2 = bar.newTab();

    Tab1.setText("Tab1");
    Tab2.setText("Tab2");

    Tab1.setTabListener(new MyTabListener());
    Tab2.setTabListener(new MyTabListener());

    bar.addTab(Tab1);
    bar.addTab(Tab2);

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    Intent newActivity;
    // Handle item selection
    switch (item.getItemId()) {
        case android.R.id.home:
            // app icon in action bar clicked; go home
            newActivity = new Intent(this, Main.class);
            newActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(newActivity);
        return true;
        case R.id.menu_today_date:
                    //if condition here based on tabs selected
            CalendarFragment frag = new CalendarFragment();
            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            ft.replace(android.R.id.content, frag);
            ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
            ft.commit();

            return true;
        case R.id.menu_prefs:
            newActivity = new Intent(this, Settings.class);
            startActivityForResult(newActivity, requestCode);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}


private class MyTabListener implements ActionBar.TabListener
{
    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        if(tab.getPosition()==0)
        {
            CalendarFragment frag = new CalendarFragment();
            ft.replace(android.R.id.content, frag);
        }
        else
        {

            ConverterFragment frag = new ConverterFragment();
            ft.replace(android.R.id.content, frag);
        }
    }
    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub
    }
    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub
    }
}
4

1 回答 1

0

我无法获得制表符位置,但这就是我最终这样做的方式:

private int tabSelected = 0;

@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
    if(tab.getPosition()==0)
    {
        tabSelected = 0;
        CalendarFragment frag = new CalendarFragment();
        ft.replace(android.R.id.content, frag);
    }
    else
    {
        tabSelected = 1;
        ConverterFragment frag = new ConverterFragment();
        ft.replace(android.R.id.content, frag);
    }
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    Intent newActivity;
    // Handle item selection
    switch (item.getItemId()) 
        case R.id.menu_today_date:
           FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
           if (tabSelected == 0){
                CalendarFragment frag = new CalendarFragment();
                ft.replace(android.R.id.content, frag);


           }
           else {
                ConverterFragment frag = new ConverterFragment();
                ft.replace(android.R.id.content, frag);
           }

           ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
           ft.commit();

        default:
            return super.onOptionsItemSelected(item);
    }
}
于 2012-09-15T16:50:49.033 回答