2013-07-04 105 views
0

经过多天的尝试找到一个双窗格片段与标签的解决方案,我放弃了,并做了我自己的listview,这是在一个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()被调用时,由于没有链接片段,它会覆盖。我可以放在'情况0'而不是'返回新的DescriptionFragment',以便我所有的片段都被链接并且不覆盖?

注 - 当我尝试和使用的getItem ft.repalce()应用程序崩溃,并根据logcat的,它不能找到R.id.container,所以我不能简单地移动代码在

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

回答

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; 
    } 
    ... 
} 
+0

非常感谢! –

0

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

公共类ViewPagerExample扩展FragmentActivity

{ 私人MyAdapter mAdapter; private ViewPager mPager; 私人静态活动活动;

/** 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 公共片段的getItem(int i)以{ 开关(I){
情况下0: 返回新DescriptionFragment();案例1: return new ImagesFragment(); 默认值: return new DescriptionFragment(); }

}

}

}