经过多天努力寻找具有双窗格片段以及标签的解决方案后,我放弃并制作了我自己的列表视图,该视图位于平板电脑的x大型布局中,并且只有片段来管理我的标签。我的所有代码都工作,除了一个部分,我试图删除选项卡中的旧片段,并根据列表中单击的项目创建一个新片段。
以下是生成标签片段的位置:
public class AppSectionsPagerAdapter extends FragmentPagerAdapter {
public AppSectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
//THESE FRAGMENTS ARE GENERATED WITH TABS AT START
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:
return new DescriptionFragment();
case 1:
return new ImagesFragment();
default:
return new DescriptionFragment();
}
}
我从listview中添加片段点击:
public void addfragment() {
//THIS FRAGMENT GOES ON TOP AFTER LISTVIEW CLICK
kick_activity.this.getSupportFragmentManager().popBackStack();
DescriptionFragment fragment = new DescriptionFragment();
android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.container, fragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.commit();
}
我的DescriptionFragment片段:
public static class DescriptionFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_section_description, container, false);
text = ((TextView) rootView.findViewById(R.id.description));
text.setText(Html.fromHtml(description_text));
return rootView;
}
我知道我做错了什么,我只是不知道如何解决它。似乎创建了来自getItem()的片段,当我点击我的listview并调用addfragment()时,由于片段没有被链接,它会叠加。我可以在'case 0'中放置什么而不是'return new DescriptionFragment',以便我的所有片段都链接起来并且不会叠加?
注意 - 当我尝试在getItem()中使用ft.repalce时,应用程序崩溃并且根据LogCat,它找不到R.id.container,因此我不能简单地移动该代码。
在此先感谢您的帮助,我将非常感谢任何解决方案,因为我已经坚持了好几天。
答案 0 :(得分:1)
如果我理解每个列表项你想要创建/设置一个相应的详细信息和图像片段,它将在FragmentPagerAdapter中托管?
如果是这样,当点击列表项时,您可以调用: -
mPager.setAdapter(new MyAdapter(getSupportFragmentManager(), listItemPosition);
单击列表项时,让FragmentPagerAdapter管理片段。
您还需要更改适配器以获取列表项位置并相应地使用。如: -
public static class MyAdapter extends FragmentPagerAdapter {
private int mPosition;
public MyAdapter(FragmentManager fm, int position) {
super(fm);
mPosition = position;
}
...
}
答案 1 :(得分:0)
请使用我正在运行的代码并且addFragment方法不可用。
公共类ViewPagerExample扩展了FragmentActivity
{ 私人MyAdapter mAdapter; 私人ViewPager mPager; private static Activity activity;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
mAdapter = new MyAdapter(getSupportFragmentManager());
activity = this;
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
}
public static class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return 2;
}
@覆盖
public Fragment getItem(int i){
开关(i){
案例0:
return new DescriptionFragment();
情况1:
返回新的ImagesFragment();
默认:
return new DescriptionFragment();
}
}
}
}