我正在尝试了解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);
但现在当我这样做时,它不再显示屏幕顶部的操作栏,而且我还想在此选项卡上保持导航状态,如果我转到另一个选项卡然后再回来。我该怎么办?
感谢您的帮助。
答案 0 :(得分:1)
最好让每个单独的片段管理自己的菜单项(操作栏),因此您必须在每个要包含菜单选项的片段中调用setHasMenuOptions(true)。在onActivityCreated()中获取对操作栏的引用并配置您的操作栏如何在那里。您还必须覆盖片段中的oncreateoptionsmenu和onOptionsItemSelected来处理菜单项单击。
还要使用视图寻呼机和标签,以使每个标签成为片段。我不知道如何让每个标签成为一项活动,我甚至不认为这是可能的,如果你这样做,那就是你的问题。我从你的代码中看不出来,这很好。
每个选项卡都需要是一个片段,因此将所有活动转换为片段,然后使用supportFragmentManager动态地将片段添加和替换到framelayout资源,或者覆盖getItem并根据需要返回正确的片段。