0

经过很多天试图找到一个带有标签的双窗格片段的解决方案后,我放弃了并制作了自己的列表视图,该列表视图位于平板电脑的 x-large 布局中,并且只有片段来管理我的标签。我的所有代码都可以工作,除了一部分,我试图删除选项卡中的旧片段并根据列表中单击的项目创建一个新片段。

这是生成选项卡片段的位置:

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();
  }
}

我从列表视图中添加片段的地方单击:

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() 的片段已创建,当我单击我的列表视图并调用 addfragment() 时,由于片段未链接,它会覆盖。我可以在“case 0”中放置什么而不是“return new DescriptionFragment”,以便我的所有片段都链接并且不覆盖?

注意 - 当我尝试在 getItem() 中使用 ft.repalce 时,应用程序崩溃,根据 LogCat,它找不到 R.id.container,所以我不能简单地将该代码移入。

提前感谢您的帮助,我将非常感谢任何解决方案,因为我已经坚持了好几天了。

4

2 回答 2

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;
    }
    ...
}
于 2013-07-04T12:32:00.570 回答
0

请真实使用我的运行代码和 addFragment 方法不可用。

公共类 ViewPagerExample 扩展了 FragmentActivity

{ 私人 MyAdapter mAdapter; 私人 ViewPager mPager; 私有静态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;
    }

@Override public Fragment getItem(int i) { switch (i) {
case 0: return new DescriptionFragment(); 案例1:返回新的ImagesFragment();默认值:返回新的DescriptionFragment();}

}

}

}

于 2013-07-04T11:38:26.213 回答