【问题标题】:Replacing a fragment in a view pager替换视图寻呼机中的片段
【发布时间】:2013-04-05 15:41:14
【问题描述】:

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

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

【问题讨论】:

  • 您正试图在视图寻呼机中“切换”片段,对吗?另外,你的问题有点含糊。如果您提供更多上下文、您收到的任何错误/特定问题,甚至可能是一些适用的代码,您将收到更好的答案。 :)

标签: android android-viewpager


【解决方案1】:

替换视图分页器中的片段

试试这个定制的 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();
}
}

以片段为参数从活动中调用它,

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 中替换视图/片段然后使用时,

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

【讨论】:

  • 这如何帮助我替换 viewpager 中的片段?你能告诉我这样做的代码吗?试过fragments.set(0, Fragment.instantiate(this, ReplacementFragment.class.getName())); adapter.notifyDataSetChanged();
  • 我已经编辑了包含 viewpager 适配器的代码,可以正常工作。所以检查这个并回复必须。感谢您尝试...
【解决方案2】:

我最终采用了一种对我来说效果很好的不同方法。我为 viewpager 中的片段使用了 ViewSwitcher。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多