经过很多天尝试寻找具有双 Pane fragment 和选项卡的解决方案后,我放弃并制作了自己的 ListView ,该 ListView 采用适合平板电脑的超大布局,并且只有 fragment 来管理我的选项卡。我的所有代码都有效,除了一部分,我试图删除选项卡中的旧 fragment 并根据列表中单击的项目创建一个新 fragment 。
这里是生成选项卡 fragment 的位置:
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 点击添加 fragment :
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();
}
我的描述 fragment fragment :
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() 中的 fragment ,当我单击 ListView 并调用 addfragment() 时,由于 fragment 未链接,它会重叠。我可以在“case 0”中放置什么而不是“返回新的 DescriptionFragment”,以便我的所有 fragment 都链接起来并且不会重叠?
注意 - 当我尝试在 getItem() 中使用 ft.repalce 时,应用程序崩溃,并且根据 LogCat,它找不到 R.id.container,因此我不能简单地将该代码移入。
提前感谢您的帮助,我将非常感谢任何解决方案,因为我已经在这个问题上坚持了好几天了。
最佳答案
如果我对每个列表项的理解正确,您想要创建/设置将托管在 FragmentPagerAdapter 中的相应详细信息和图像 fragment ?
如果是这样,当单击列表项时,您可以调用:-
mPager.setAdapter(new MyAdapter(getSupportFragmentManager(), listItemPosition);
当单击列表项时,让 FragmentPagerAdapter 管理 fragment 。
您还需要更改适配器以占据列表项位置并相应地使用。如:-
public static class MyAdapter extends FragmentPagerAdapter {
private int mPosition;
public MyAdapter(FragmentManager fm, int position) {
super(fm);
mPosition = position;
}
...
}
关于java - fragment 未被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17467454/