2013-03-27 70 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

相關問題