需要一些关于Android片段和ActionBar选项卡的解释

时间:2014-08-03 18:53:44

标签: android android-intent android-fragments tabs

我正在尝试了解Android片段和导航,但有些事情我不知道该怎么做。我创建了一个应用程序,其MainActivity包含一个viewPager:

public class MainActivity extends FragmentActivity implements TabListener
{
    private ViewPager viewPager;
    private TabsPagerAdapter mAdapter;
    private ActionBar actionBar;
    private String[] tabNames = {"Tab 1", "Tab 2", "Tab 3"};

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

        viewPager = (ViewPager) findViewById(R.id.pager);
        actionBar = getActionBar();
        mAdapter = new TabsPagerAdapter(getSupportFragmentManager());

        viewPager.setAdapter(mAdapter);
        actionBar.setHomeButtonEnabled(false);
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        for(int i = 0 ; i < tabNames.length ; i++) 
            actionBar.addTab(actionBar.newTab().setText(tabNames[i]).setTabListener(this));
    }

    @Override
    public void onTabReselected(Tab tab, FragmentTransaction ft) {}

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft)
    {
        viewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabUnselected(Tab tab, FragmentTransaction ft) {}
}

以下是TabsPagerAdapter

public class TabsPagerAdapter extends FragmentPagerAdapter
{
    public TabsPagerAdapter(FragmentManager fm)
    {
        super(fm);
    }

    @Override
    public Fragment getItem(int index)
    {
        if(index == 0) return new FirstFragment();
        else if(index == 1) return new SecondFragment();
        else return new ThirdFragment();
    }

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

我的FirstFragment是一个列表,因此它扩展了ListFragment。这是它的样子:

enter image description here

现在我想点击一个项目去另一个视图。之前我曾经在没有操作栏和标签的应用程序中这样做:

Intent i = new Intent(this.getActivity().getApplicationContext(), MyNewActivity.class);
startActivity(i);

但现在当我这样做时,它不再显示屏幕顶部的操作栏,而且我还想在此选项卡上保持导航状态,如果我转到另一个选项卡然后再回来。我该怎么办?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

最好让每个单独的片段管理自己的菜单项(操作栏),因此您必须在每个要包含菜单选项的片段中调用setHasMenuOptions(true)。在onActivityCreated()中获取对操作栏的引用并配置您的操作栏如何在那里。您还必须覆盖片段中的oncreateoptionsmenu和onOptionsItemSelected来处理菜单项单击。

还要使用视图寻呼机和标签,以使每个标签成为片段。我不知道如何让每个标签成为一项活动,我甚至不认为这是可能的,如果你这样做,那就是你的问题。我从你的代码中看不出来,这很好。

每个选项卡都需要是一个片段,因此将所有活动转换为片段,然后使用supportFragmentManager动态地将片段添加和替换到framelayout资源,或者覆盖getItem并根据需要返回正确的片段。