我正在嘗試創(chuàng)建一個(gè)帶有選項(xiàng)卡的瀏覽器,您可以輕松地在這些選項(xiàng)卡之間添加,刪除和滑動(dòng)。目前,我有一個(gè)ViewPager,每個(gè)分頁(yè)的片段都包含一個(gè)WebView和一些按鈕。問(wèn)題是添加或刪除標(biāo)簽后,我似乎無(wú)法可靠地更新ViewPager。我相信這部分是由FragmentStatePagerAdapter中的錯(cuò)誤引起的,但是解決方法似乎不適用于我的用例,或者我無(wú)法實(shí)現(xiàn)它們(我是Android + Java noob)。理想情況下,添加和刪除選項(xiàng)卡不會(huì)導(dǎo)致不必要地重新加載任何頁(yè)面/選項(xiàng)卡中的WebView。至少它們需要恢復(fù)到以前的狀態(tài)。當(dāng)前,存在兩個(gè)特定問(wèn)題:在特定位置添加選項(xiàng)卡會(huì)在最后一頁(yè)上顯示空白片段。如果我在末尾添加了新標(biāo)簽,效果還可以。刪除標(biāo)簽會(huì)正確更新標(biāo)簽,但是如果之后添加新標(biāo)簽,我會(huì)在最后一頁(yè)看到完全空白的片段。這是我的適配器代碼:import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentStatePagerAdapter;import android.support.v4.app.FragmentTransaction;import android.view.ViewGroup;import java.util.ArrayList;public class BrowserTabRepository extends FragmentStatePagerAdapter {public Browser browser;public ArrayList<BrowserTabFragment> mFragmentList = new ArrayList<BrowserTabFragment>();public boolean removing;public BrowserTabRepository(FragmentManager fm, Browser browser) { super(fm); this.browser = browser;}public BrowserTabRepository(FragmentManager fm) { super(fm);}@Overridepublic BrowserTabFragment getItem(int position) { return mFragmentList.get(position);}public boolean hasItem(int position) { return position < mFragmentList.size();}public void clearAllItems() { mFragmentList.clear(); this.notifyDataSetChanged();}public void updateItem(int position, BrowserTabFragment fragment) { mFragmentList.set(position, fragment); notifyDataSetChanged();}@Overridepublic int getItemPosition(Object object) { // if(removing)return POSITION_NONE; workaround/hack I found. Tabs don't get messed up but the adapter incorrectly returns the state of the fragment that has just been deleted instead of the one replacing it if (mFragmentList.contains(object)) { final int index = mFragmentList.indexOf(object); return index; } return POSITION_NONE;}
1 回答

拉莫斯之舞
TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊
我最終放棄了這種方法,因?yàn)樗荈ragmentStatePagerAdapter的一個(gè)長(zhǎng)期存在的錯(cuò)誤,我無(wú)法針對(duì)高度動(dòng)態(tài)化的制表符的要求修復(fù)100%的錯(cuò)誤。
我發(fā)現(xiàn)一個(gè)更好的解決方案是切換到使用RecyclerView + PagerSnapHelper + RecyclerView.Adapter,因?yàn)樗墓ぷ鞣绞綆缀跖c減去錯(cuò)誤的方式相同
添加回答
舉報(bào)
0/150
提交
取消