Use Tab layout in MVVM architecture with the data binding library

后端 未结 3 462
佛祖请我去吃肉
佛祖请我去吃肉 2021-01-31 21:48

I am developing an app that has a tab layout as the image.

I’d like to use MVVM architecture with data binding library but I am new with this framework.

3条回答
  •  不知归路
    2021-01-31 22:05

    MainActivity -

        public class MainActivity extends Activity 
        {
            @Override
            protected void onCreate(@Nullable final Bundle savedInstanceState)
            {
                super.onCreate(savedInstanceState);
                App.get(this).component().inject(this);
                ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
                binding.setHandler(this);
                binding.setManager(getSupportFragmentManager());
            }
            
            @BindingAdapter({"bind:handler"})
            public static void bindViewPagerAdapter(final ViewPager view, final MainActivity activity)
            {
                final MainActionsAdapter adapter = new MainActionsAdapter(view.getContext(), activity.getSupportFragmentManager());
                view.setAdapter(adapter);
            }
            
            @BindingAdapter({"bind:pager"})
            public static void bindViewPagerTabs(final TabLayout view, final ViewPager pagerView)
            {
                view.setupWithViewPager(pagerView, true);
            }
        
        }
    

    xml -

        
        
            
        
                
        
                
        
                
            
        
            
        
                
        
                
                
        
                
        
            
        
        
    

    Adapter -

        public class MainSectionsAdapter extends FragmentPagerAdapter
        {
            private static final int CONTACTS = 0;
            private static final int CALLS = 1;
            private static final int CHATS = 2;
            
            private static final int[] TABS = new int[]{CONTACTS, CALLS, CHATS};
            
            private Context mContext;
            
            public MainSectionsAdapter(final Context context, final FragmentManager fm)
            {
                super(fm);
                mContext = context.getApplicationContext();
            }
            
            @Override
            public Fragment getItem(int position)
            {
                switch (TABS[position])
                {
                    case CONTACTS:
                        return ContactsFragment.newInstance();
                    case CALLS:
                        return CallsFragment.newInstance();
                    case CHATS:
                        return ChatsFragment.newInstance();
                }
                return null;
            }
            
            @Override
            public int getCount()
            {
                return TABS.length;
            }
            
            @Override
            public CharSequence getPageTitle(int position)
            {
                switch (TABS[position])
                {
                    case CONTACTS:
                        return mContext.getResources().getString(R.string.contacts);
                    case CALLS:
                        return mContext.getResources().getString(R.string.calls);
                    case CHATS:
                        return mContext.getResources().getString(R.string.chats);
                }
                return null;
            }
        }
    

提交回复
热议问题