2013-03-27 72 views
1

我试图找到一个类似于这个https://stackoverflow.com/a/13925130/1634451的解决方案,但是海报并没有解释R.id.products_list_linear是什么。我试图将R.id.products_list_linear设置为我想要替换的片段的线性布局ID。但是这只是将两个片段叠加在一起。我非常确定,我需要在viewpager中获取容器的id,但我不知道如何获取此id。在视图寻呼机中替换一个片段

编辑: 为了澄清我想用另一个我的代码看起来几乎完全像我发布的答案,但是当我做R.id.products_list_linear我想我的片段的视图试图取代布局。我只是更换片段被覆盖在一个我试图取代

+0

你正试图在视图寻呼机中“切换”片段,对吗? 此外,你的问题有点含糊。如果您提供了更多的上下文,您收到的任何错误/特定问题,甚至可能包含某些适用的代码,您将收到更好的答案。 :) – Don 2013-03-27 00:57:44

回答

0

我最终用一种不同的方法来解决我的问题。我使用ViewSwitcher作为viewpager中的片段。

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

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

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

当您将view/fragment替换为viewPager时,请使用

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

这是如何帮助我在viewpager中替换一个片段?你能告诉我这样做的代码吗?尝试 fragments.set(0,Fragment.instantiate(this,\t \t \t ReplacementFragment.class.getName())); adapter.notifyDataSetChanged(); – user1634451 2013-03-27 17:05:29

+1

我编辑了代码,包括viewpager适配器,这是正常工作。因此请检查并回复。感谢您的努力... – 2013-03-28 04:28:29

相关问题