Лучший способ динамически добавлять вкладки с использованием новой архитектуры - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь создать макет вкладок, где вы можете добавить больше вкладок одним нажатием кнопки. Я использую новую модель ViewPager2 + FragmentStateAdapter + TabLayoutMediator.

У меня есть основной макет активности, содержащий TabLayout и ViewPager2.
. Я использую тот же фрагмент для всех вкладок: TabFragment
My FragmentStateAdapter, используемый моим TabLayout, выглядит следующим образом

public class TabPageAdapter extends FragmentStateAdapter {

    private int tabCount;

    public TabPageAdapter(@NonNull FragmentActivity fragmentActivity, int tabCount) {
        super(fragmentActivity);
        this.tabCount = tabCount;
    }

    @NonNull
    @Override
    public Fragment createFragment(int position) {
        return new TabFragment(position);
    }

    @Override
    public int getItemCount() {
        return tabCount;
    }
}

Наконец, я настроил все в своем MainActivity классе:

public class MainActivity extends AppCompatActivity {

    private int tabCount = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final TabLayout tabs = findViewById(R.id.tabs);
        final ViewPager2 pager = findViewById(R.id.pager);

        TabPageAdapter adapter = new TabPageAdapter(MainActivity.this, ++tabCount);
        pager.setAdapter(adapter);

        new TabLayoutMediator(tabs, pager, new TabLayoutMediator.TabConfigurationStrategy() {
            @Override
            public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
                tab.setText("Tab #" + (position + 1));
            }
        }).attach();

        FloatingActionButton actionButton = findViewById(R.id.floatingActionButton);
        actionButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Add a tab
            }
        });
    }
}

Я не уверен, как динамически добавлять дополнительные вкладки, просто добавив tabs.addTab(tabs.newTab(), tabCount); внутри слушателя, у меня не работает

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