用于自定义TabLayout视图的Android数据绑定

时间:2018-12-26 06:53:08

标签: android android-databinding

我正在尝试使用Android数据绑定为TabLayout实现自定义视图。

我有设置数据绑定器,它使用数据绑定为选项卡设置视图分页器和适配器,但由于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;
    }

我正在使用自定义视图更新TabLayout。

0 个答案:

没有答案