【问题标题】:Need some explanations about Android fragments and ActionBar tabs需要一些关于 Android 片段和 ActionBar 选项卡的解释
【发布时间】:2014-08-03 18:53:43
【问题描述】:

我正在尝试了解 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。这是它的样子:

现在,如果我单击一个项目,我想转到另一个视图。在我以前在没有操作栏和标签的应用程序中这样做之前:

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

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

感谢您的帮助。

【问题讨论】:

  • 操作栏标签在“L”开发者预览版中已被弃用,并且在其正式发布(Android 5.0 或其他任何名称)后仍应被弃用。

标签: android android-intent android-fragments tabs


【解决方案1】:

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

还可以使用视图分页器和选项卡,让每个选项卡成为一个片段。我不知道如何让每个选项卡成为一项活动,我什至不认为这是可能的,如果你这样做,那就是你的问题。我从您的代码中看不到这一点,这很好。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多