我有一个活动,它将ViewPager用于多个片段,这些片段由JSONArray对象控制。当我添加一个新数组并更新适配器时,所有内容都会更新为正确的信息,除了TabLayout不会反映更改,直到滚动操作发生。
如果我在当前最后一个片段上添加片段,则会创建一个新片段并更新模型,但TabLayout会将当前选中的片段显示为最后一个片组。如果执行滚动动作,则可以看到新选项卡,但视图更新不是自动的。
有没有人遇到过此问题,您对如何更新TabLayout视图有什么想法吗?
这是活动和适配器:
@EActivity(R.layout.activity_displays) 公共类DisplaysActivity扩展了FitActivity {
@ViewById(R.id.button_right)
FitButton rightButton;
@ViewById(R.id.displays_tabview)
TabLayout tabView;
ViewPager viewPager;
JSONArray huds;
DisplaysPagerAdapter mAdapter;
@AfterViews
public void AfterViews() {
huds = StandardHuds.getStandardHudPagerData();
mAdapter = new DisplaysPagerAdapter(getSupportFragmentManager());
viewPager = (ViewPager) findViewById(R.id.displays_pager);
viewPager.setAdapter(mAdapter);
viewPager.setOffscreenPageLimit(10);
tabView.setTabMode(TabLayout.MODE_SCROLLABLE);
tabView.setupWithViewPager(viewPager);
}
@Click(R.id.button_right)
void newHud() {
addHud();
}
public class DisplaysPagerAdapter extends FragmentPagerAdapter {
public DisplaysPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
if (position == 0) {
return LegendFragment_.builder().build();
} else {
JSONArray a = new JSONArray();
DisplayFragment frag = DisplayFragment_.builder().build();
try {
a = huds.getJSONArray(position - 1);
} catch (JSONException e) {
e.printStackTrace();
}
frag.setHudArray(a);
return frag;
}
}
@Override
public int getCount() {
return huds.length() + 1;
}
@Override
public CharSequence getPageTitle(int position) {
if (position == 0) {
return "Legend";
} else {
return "Display " + position;
}
}
}
public void addHud() {
JSONArray newArray = new JSONArray();
JSONArray rowArray = new JSONArray();
newArray.put(rowArray);
newArray.put(rowArray);
newArray.put(rowArray);
huds.put(newArray);
mAdapter.notifyDataSetChanged();
viewPager.refreshDrawableState();
tabView.refreshDrawableState();
}
}
活动中的ViewPager / TabLayout的xml
<android.support.v4.view.ViewPager
android:id="@+id/displays_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/footer">
<android.support.design.widget.TabLayout
android:id="@+id/displays_tabview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:background="?attr/colorFitBg1"
app:tabIndicatorColor="?attr/colorFitPrimary"
app:tabSelectedTextColor="?attr/colorFitPrimary" />
</android.support.v4.view.ViewPager>
我尝试以几种不同的方式更新tabView,但该选项卡仍然不在屏幕上。更改最大屏幕外计数不会影响此问题。
如果您有任何想法,请告诉我。提前谢谢。