代码之家  ›  专栏  ›  技术社区  ›  Kar

具有MVP的Android TabLayout片段

  •  1
  • Kar  · 技术社区  · 7 年前

    我正在实现一个MVP应用程序,其中视图是活动中加载的片段。每个活动都有一个片段要显示。我必须更改我的实现并添加现在将显示片段的TabLayout。我尝试了不同的方法将片段传递给适配器,但都会导致我的应用程序崩溃,我无法理解错误。最后一次尝试,我将向适配器传递一个片段的arraylist(目前为1)。在基地,我在跟踪 google samples MVP todo app ,但我需要实现此选项卡布局。拜托,这是我的主要项目,我到处找,这是我最后的选择。

    public class HomeActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_home);
    
            Toolbar mHomeToolbar = (Toolbar) findViewById(R.id.toolbar);    // Set to the corresponding Toolbar in the UI.
            setSupportActionBar(mHomeToolbar);
    
            mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);    // Set to the corresponding Drawer Layout in the UI.
    
            ActionBarDrawerToggle mToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mHomeToolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
            mDrawerLayout.addDrawerListener(mToggle);   // Set mToggle as Drawer's toggle button and listen to actions.
            mToggle.syncState();
    
            NavigationView mDrawerNavigationView = (NavigationView) findViewById(R.id.nav_view);    // Set the corresponding Navigation View in the UI.
    
            mDrawerNavigationView.setNavigationItemSelectedListener(this);  // Add listener on Navigation's items.
    
            HomeFragment homeFragment = (HomeFragment) getSupportFragmentManager().findFragmentById(R.id.Quests_Frame); // Set to corresponding Fragment View in the UI.
    
            if (homeFragment == null) {
                homeFragment = HomeFragment.newInstance();
                FragmentLoader.loadFragmentInActivity(getSupportFragmentManager(), homeFragment, R.id.Quests_Frame);    // Display fragment in Activity.
            }
    
            repo = QuestsRepository.getInstance(QuestsDataSource.getINSTANCE());
            mHomePresenter = new HomePresenter(repo , homeFragment);
    
            TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout);
            ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
            TabPagerAdapter adapter = new TabPagerAdapter(getSupportFragmentManager());
            adapter.addFragment(homeFragment);
            viewPager.setAdapter(adapter);
    
        }
    

    适配器类:

    public class TabPagerAdapter extends FragmentPagerAdapter {
    
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final int tabCount = 3;
    
        public TabPagerAdapter(FragmentManager fragmentManager) {
            super(fragmentManager);
        }
    
        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    mFragmentList.get(position);
                default:
                    return null;
            }
        }
    
        public void addFragment(Fragment fragment) {
            mFragmentList.add(fragment);
        }
    
        @Override
        public int getCount() {
            return tabCount;
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Knight Ramsamy    7 年前
    1. 对于您想要实现的目标,您将不会使用FragmentLoader类。删除它(仅用于选项卡活动)。以及getSupportFragmentManager行。

    2. 在家庭活动中,如何设置tabLayout和Viewpager,这很好。 删除addFragment行。 在setAdapter之后添加以下内容:

      mTabLayout。设置WithViewPager(mViewPager);

    3. 在选项卡PageRadapter中,只需创建对象presenter并在那里分割。 在getItem方法的案例0中,您可以有:

      HomeFragment HomeFragment=HomeFragment。newInstance(); homePresenter=新的homePresenter(repo,homeFragment); 返回homeFragment;

    4. 哦,在TabPagerAdapter中,您可以在那里传递repo参数来创建演示者。

    我希望我是清楚的。如果您有任何问题,请告诉我。