Android TabLayout Фрагмент с MVP - PullRequest
       1

Android TabLayout Фрагмент с MVP

0 голосов
/ 27 апреля 2018

Я реализую приложение MVP, в котором представления представляют собой фрагменты, загруженные в действия. Каждое действие имело 1 фрагмент для отображения. Я должен изменить свою реализацию и добавить TabLayout, который теперь будет отображать фрагменты. Я пробовал разные способы передачи фрагмента в адаптер, но все это приводит к сбою приложения, и я не могу понять ошибку. Последняя попытка - передать массив фрагментов (на данный момент 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 Ответ

0 голосов
/ 03 мая 2018
  1. Для того, чего вы хотите достичь, вы не будете использовать класс FragmentLoader. Удалите его (только для вкладок Активности). И строка getSupportFragmentManager.

  2. В домашней активности, как вы настраиваете tabLayout и Viewpager, это нормально Удалить строку addFragment. Добавьте следующее после setAdapter:

    mTabLayout.setupWithViewPager (mViewPager);

  3. В tabPagerAdapter просто создайте объект презентатора и фрагмент там. В методе getItem, случай 0, вы можете иметь:

    HomeFragment homeFragment = HomeFragment.newInstance (); homePresenter = новый HomePresenter (репо, homeFragment); возврат домойFragment;

  4. Да, и в TabPagerAdapter вы можете передать аргумент репо для создания докладчика.

Надеюсь, мне было ясно. Дайте мне знать, если у вас возникнут проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...