Я пытаюсь создать макет вкладок, где вы можете добавить больше вкладок одним нажатием кнопки. Я использую новую модель 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);
внутри слушателя, у меня не работает