我正在尝试创建一个在内容部分中具有ListView的Fragment,作为默认视图。此视图有ActionBar选项卡。到目前为止,我能够创建它。
LaunchListFragment代码
public class LaunchListFragment extends ListFragment implements ActionBar.TabListener {
public static String LIST_TYPE = "invalid";
GenericListData g_data[] = null;
private ViewPager mViewPager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View result = inflater.inflate(R.layout.fragment_launch_list,
container, false);
setActionTabs();
setList();
return (result);
}
public static LaunchListFragment newInstance(String type) {
LaunchListFragment frag = new LaunchListFragment();
Bundle args = new Bundle();
LIST_TYPE=type;
args.putString(LIST_TYPE, type);
frag.setArguments(args);
return (frag);
}
我想要的是,当你点击onTabSelected()时,想要更改视图,我正在使用PagerFragment和使用FragmentPagerAdapter生成的视图
@Override
public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) {
getChildFragmentManager().beginTransaction()
.add(android.R.id.content,
new PagerFragment()).commit();
}
麻烦的是,我不能使用getChildFragmentManager或getFragmentManager来调用PagerFragment,我得到编译错误,将PagerFragment更改为app.Fragment。即使我改变了,它仍然抱怨。
我怀疑support.Fragment和app.Fragment之间存在某种冲突。
除了使用嵌套片段之外,是否有其他方法可以实现此目的?
任何帮助表示感谢。
答案 0 :(得分:2)
我建议你使用viewPager,让你的两个片段显示在选项卡选项上(在操作栏上)。根据需要使用FragmentStatePagerAdapter或FragmentPagerAdapter,然后初始化viewPager并设置适配器。然后在'onTabSelected()'获取标签位置,然后显示相应的viewPager的页面。
FragmentPagerAdapter fragmentStagePageAdapter = new SearchStatePagerAdapter(getFragmentManager());
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mView = inflater.inflate(R.layout.venues_tabhost_layout, container, false);
mViewPager = ( com.edenpod.goinout.view.ViewPager) mView.findViewById(R.id.pager);
mViewPager.removeAllViews();
mViewPager.setAdapter(fragmentStagePageAdapter);
mViewPager.setOffscreenPageLimit(3);
----------------
---------------
--------------
}
public void onTabChanged(Tab tab, android.app.FragmentTransaction ft) {
int pos = tab.getCurrentTab();
if( mViewPager!= null && pos == 0 ) {
mViewPager.setCurrentItem(pos);
} else if( mViewPager != null && pos == 1 ) {
mViewPager.setCurrentItem(pos);
} else if( mViewPager != null && pos == 2 ) {
mViewPager.setCurrentItem(pos);
}
}
// Example PagerAdapter
public class SearchStatePagerAdapter extends FragmentPagerAdapter{
private ArrayList<Fragment> mFragmentsList;
public SearchStatePagerAdapter(FragmentManager fm) {
super(fm);
mFragmentsList = new ArrayList<Fragment>();
mFragmentsList.add(new VenueSearchFragment());
mFragmentsList.add(new PeopleSearchFragment());
}
@Override
public int getCount() {
return mFragmentsList.size();
}
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = mFragmentsList.get(position);
break;
case 1:
fragment = mFragmentsList.get(position);
break;
}
return fragment;
}
}