Связывание данных Android для настраиваемого представления TabLayout - PullRequest
0 голосов
/ 26 декабря 2018

Я пытаюсь реализовать пользовательское представление для TabLayout, используя привязку данных Android.

У меня есть установщики связывания данных, настраивающие пейджер представления и адаптеры для вкладок с использованием привязки данных, но поскольку FragmentPagerAdapter не имеет методов переопределения для настраиваемого представления.

Связыватели данных:

 @BindingAdapter("headline_frag_handler")
    public static void bindViewPagerAdapter(final ViewPager viewPager, TabActivity activity){
        final HomeFragmentTabAdapter adapter = new HomeFragmentTabAdapter(activity.getApplicationContext(), activity.getSupportFragmentManager());
        viewPager.setAdapter(adapter);
    }

    @BindingAdapter("headline_frag_pager")
    public static void bindViewPagerTabs(final TabLayout view, final ViewPager pagerView){
        view.setupWithViewPager(pagerView, true);
    }

XML

 <com.google.android.material.tabs.TabLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/headline_frag_tab_layout"
        android:layout_alignParentTop="true"
        app:headline_frag_pager="@{pager}"
        />
    <androidx.viewpager.widget.ViewPager
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/headline_frag_view_pager"
        android:layout_below="@+id/headline_frag_tab_layout"
        android:background="?attr/headline_fragment_view_pager"
        app:headline_frag_handler="@{handler}"
        />

Адаптер FragmentPager

@Override
    public Fragment getItem(int position) {
        switch (TABS[position]){
            case MAIN:
                return new MainHeadlineFragment();
            case PLATFORM:
                return new PlatformFragment();
        }
        return new MainHeadlineFragment();
    }

    @Override
    public int getCount() {
        return TABS.length;
    }


    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        switch (TABS[position])
        {
            case MAIN:
                return "MAIN";
            case PLATFORM:
                return "Platform";
        }
        return null;
    }

    public View getTabView(int position) {
        View v = LayoutInflater.from(mContext).inflate(R.layout.top_tab_item, null);
        TextView tv = (TextView) v.findViewById(R.id.top_tab_text);
        tv.setText(TABS[position]);
        return v;
    }

Я хочу обновить вкладку с помощью пользовательского представления.

...