2014-01-27 168 views
2

我在我的與7個片段應用一個viewpager,各自代表自己的邏輯Viewpager與片段

然而,也有相互耦合2個片段,一個不能沒有其他存在。

我有2個按鈕,在切換片段的屏幕底部的上一個和下一個。

我想使它所以在viewpager揮動無法到達再加片段之一

現在我這樣做:我把第一個片段(耦合者的)是在位置0,第二個片段位於最後一個位置,這樣當您左右滑動時,就可以最後到達第二個耦合片段。

我想讓它,所以你無法與刷卡

如何做到這一點的最後一個片段?

編輯:

片段適配器

public class PurchaseFragmentStatePagerAdapter extends FragmentStatePagerAdapter { 

private List<BaseFragment> fragments; 
private boolean shouldShowLastFragment; 
@Inject 
public PurchaseFragmentStatePagerAdapter(FragmentManager fm) { 
    super(fm); 
} 

public void setFragments(List<BaseFragment> fragments) { 
    this.fragments = fragments; 
} 

@Override 
public BaseFragment getItem(int position) { 
    return fragments.get(position); 
} 

@Override 
public int getCount() { 
    return fragments == null ? 0 : shouldShowLastFragment ? fragments.size() : fragments.size()-1; 
} 

public void enableItem(int i) { 
    shouldShowLastFragment = true; 
    notifyDataSetChanged(); 
} 

public void disableItem(int i) { 

    shouldShowLastFragment = false; 
    notifyDataSetChanged(); 
} 

}

+0

在我看來,你通過實現setFragments(List fragments)來打破適配器的目的。相反,您應該重寫getItem(int position),如Erix在其答案中所示,讓適配器實例化各個片段。我懷疑這也是我的答案出錯的地方。 – cYrixmorten

回答

0

我假設你有一張FragmentStatePagerAdapter或FragmentPagerAdapter。

在您的適配器中,將getCount()方法設置爲6,將確保您無法到達最後一個片段。

@Override 
public int getCount() { 
    return 6; 
} 
+0

我仍然可以通過setCurrentItem(6)以編程方式達到它? –

+0

如果你的getItem(position)方法支持它,我會這麼認爲,是的 – cYrixmorten

+0

或者你可以在getCount方法中有一些邏輯,比如'return(shouldShowLastFragment)? 7:6;'啓用/禁用最後一個片段。 – cYrixmorten