片段未被删除

时间:2013-07-04 10:03:28

标签: java android

经过多天努力寻找具有双窗格片段以及标签的解决方案后,我放弃并制作了我自己的列表视图,该视图位于平板电脑的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,因此我不能简单地移动该代码。

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

2 个答案:

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

}

}

}