Пример TabLayout, показывающий вкладки с макетом xml без фрагментов - PullRequest
0 голосов
/ 15 июня 2019

Я хотел бы иметь простые облегченные вкладки - никаких фрагментов, поскольку вкладки не имеют отдельной функциональности жизненного цикла и уже могут быть повторно использованы в качестве ViewGroups. Смахивание не требуется, и я не хочу ViewPager, если я абсолютно не должен.

У меня есть пример работы с ViewPager и мои простые представления, преобразованные во фрагменты, но это вынуждает меня изменить тип моего базового класса Activity и рисует в нескольких вспомогательных библиотеках, удваивая размер моего приложения, которое должно было быть очень маленький.

В основном что-то вроде этого примера , но с фактическими, определенными в формате XML макетами, отображаемыми на вкладках, а не всплывающее сообщение при нажатии на заголовки вкладок.

Вот что я попробовал:

public class LightweightTabs extends Activity {

@Override
protected void onCreate(Bundle bundy) {
    super.onCreate(bundy);
    setContentView(R.layout.main);
    LayoutInflater linflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    TabLayout tabs = findViewById(R.id.tabs);

    tabs.addView(new WiFiOptions().view(linflater, this, null));
    tabs.addView(new BluetoothOptions().view(linflater, this, null));

    tabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            tab.select();
        }
        @Override
        public void onTabUnselected(TabLayout.Tab tab) {}
        @Override
        public void onTabReselected(TabLayout.Tab tab) {}
    });
}
...
}

Представления для классов вкладок выглядят так:

public class WiFiOptions {

public View view(LayoutInflater linflater, final Context con, ViewGroup parentView) {
    final View view = linflater.inflate(R.layout.wifi, parentView);
    ...
    return view;
}

}

Как отмечено в комментариях на этой странице, это не работает, потому что

вы можете добавить экземпляр TabItem только через addView

& Ndash; так же, как addTab.

Нужно ли мне писать собственный PagerAdapter для этого?

(Кроме того, я не понимаю, почему он не настроен, поэтому мы могли бы просто указать макет в xml для каждого TabItem в TabLayout и легко сделать все это в xml ..)

...