替换视图寻呼机中的片段

时间:2013-03-27 00:07:47

标签: android android-viewpager

我正在尝试找到一个类似于https://stackoverflow.com/a/13925130/1634451的解决方案,但海报没有解释R.id.products_list_linear是什么。我试图将R.id.products_list_linear设置为我想要替换的片段的linearlayout的id。但这只是将2个片段叠加在一起。我很确定我需要在viewpager中获取容器的id,但我不知道如何获得此id。

编辑: 为了澄清我试图用另一个代码替换视图寻呼机中的片段,我的代码看起来几乎就像我发布的答案,但是当我制作R.id.products_list_linear我想要替换布局的片段时。我正在替换的片段覆盖在我试图替换的片段上

2 个答案:

答案 0 :(得分:2)

替换视图寻呼机中的碎片

试试这个自定义的ViewPager适配器,..

import java.util.List;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.view.ViewGroup;

public class ViewPagerAdapter extends FragmentStatePagerAdapter {
    private List<Fragment> fragments=null;
private FragmentManager fragmentManager=null;

public ViewPagerAdapter(FragmentManager fragmentManager,List<Fragment> fragments) {
    super(fragmentManager);
    this.fragments=fragments;
    this.fragmentManager=fragmentManager;
}
@Override
public Fragment getItem(int position) {
    return fragments.get(position);
}
@Override
public int getCount() {
    return fragments.size();
}
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object)
{
    super.setPrimaryItem(container,0,object);
}
@Override
public void notifyDataSetChanged()
{
    super.notifyDataSetChanged();
}
@Override
public void destroyItem(ViewGroup collection, int position, Object view) {
    fragmentManager.executePendingTransactions();
    fragmentManager.saveFragmentInstanceState(fragments.get(position));
}
public void replaceItem(int position,Fragment fragment)
{
    fragments.set(position, fragment);
    this.notifyDataSetChanged();
}
}

从具有fragment作为参数的活动中调用它,

List<Fragment> fragments = new Vector<Fragment>();
fragments.add(Fragment.instantiate(this, Fragment1.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment2.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment3.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment4.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment5.class.getName()));
mPagerAdapter=new ViewPagerAdapter(getFragmentManager(), fragments);

当您在viewPager中替换view / fragment时,请使用

mPagerAdapter.replaceItem(2,Fragment.instantiate(this, Fragment5.class.getName()));

答案 1 :(得分:0)

我最终采用了一种不同的方法,对我来说非常好。我在viewpager中使用ViewSwitcher作为片段。