如何在向ViewPager添加新片段后更新TabLayout

时间:2017-05-22 20:19:00

标签: android android-fragments android-tablayout

我有一个活动,它将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,但该选项卡仍然不在屏幕上。更改最大屏幕外计数不会影响此问题。

如果您有任何想法,请告诉我。提前谢谢。

0 个答案:

没有答案