我正在尝试创建一个带有选项卡的浏览器,您可以轻松地在这些选项卡之间添加,删除和滑动。目前,我有一个ViewPager,每个分页的片段都包含一个WebView和一些按钮。
问题是添加或删除标签后,我似乎无法可靠地更新ViewPager。我相信这部分是由FragmentStatePagerAdapter中的错误引起的,但是解决方法似乎不适用于我的用例,或者我无法实现它们(我是Android + Java noob)。
理想情况下,添加和删除选项卡不会导致不必要地重新加载任何页面/选项卡中的WebView。至少它们需要恢复到以前的状态。
当前,存在两个特定问题:
在特定位置添加选项卡会在最后一页上显示空白片段。如果我在末尾添加了新标签,效果还可以。
删除标签会正确更新标签,但是如果之后添加新标签,我会在最后一页看到完全空白的片段。
这是我的适配器代码:
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);
}
@Override
public 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();
}
@Override
public 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;
}
拉莫斯之舞
相关分类