我正在开发一个具有标签布局作为图像的应用程序.
我想将MVVM架构与数据绑定库一起使用,但我是这个框架的新手.
我可以通过使用ViewPager作为此示例的常规设置选项卡布局而不使用MVVM来执行此操作.
没有MVVM和数据绑定的常规选项卡布局:
activity_main.xml中:
MainActivity.java:
public class MainActivity extends AppCompatActivity { private Toolbar toolbar; private TabLayout tabLayout; private ViewPager viewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); viewPager = (ViewPager) findViewById(R.id.viewpager); setupViewPager(viewPager); tabLayout = (TabLayout) findViewById(R.id.tabs); tabLayout.setupWithViewPager(viewPager); } private void setupViewPager(ViewPager viewPager) { ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); adapter.addFragment(new OneFragment(), "ONE"); adapter.addFragment(new TwoFragment(), "TWO"); adapter.addFragment(new ThreeFragment(), "THREE"); viewPager.setAdapter(adapter); } class ViewPagerAdapter extends FragmentPagerAdapter { private final ListmFragmentList = new ArrayList<>(); private final List mFragmentTitleList = new ArrayList<>(); public ViewPagerAdapter(FragmentManager manager) { super(manager); } @Override public Fragment getItem(int position) { return mFragmentList.get(position); } @Override public int getCount() { return mFragmentList.size(); } public void addFragment(Fragment fragment, String title) { mFragmentList.add(fragment); mFragmentTitleList.add(title); } @Override public CharSequence getPageTitle(int position) { return mFragmentTitleList.get(position); } }
}
MVVM中的标签布局:
将MVVM与数据绑定库一起使用时,我们必须使用选项卡布局视图的视图模型.
我不知道如何在XML和视图模型中设置标签布局.如何使用数据绑定库处理诸如"点击布局的一个选项卡"之类的事件
有没有使用数据绑定库在MVVM中使用Tab布局的示例?
谢谢你的帮助.
主要活动 -
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 -
适配器 -
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; } }