60
задан 9 January 2017 в 14:27

2 ответа

Я использую Kotlin и провел час для нахождения ошибок с этим кодом.

var viewPager: ViewPager = view.findViewById(R.id.viewPager)

...

adapter = TabAdapter(fragmentManager!!)
adapter.addFragment(Fragment1(), "Fragment 1")
adapter.addFragment(Fragment2(), "Fragment 2")

viewPager.adapter = adapter

tabLayout.setupWithViewPager(viewpager)

я могу скомпилировать это без ошибки, но заголовок вкладки не показывает, пока я не понимаю viewpager, который я присвоил tabLayout, не viewPager (заметьте использовать для своей выгоды 'P'). Это не производит ошибку, потому что kotlin найдет любой идентификатор расположения соответствия, в этом случае "viewpager", который является ViewPager, но на другом представлении.

1
ответ дан 1 November 2019 в 10:01

Спасибо Hatem Badawi,

я начал разрабатывать в Java недавно. Я использовал WPF и XAML в .NET прежде, и вещи довольно отличаются там когда дело доходит до дизайна UI. Так или иначе у меня была та же проблема. Я хотел определить TabItem в XML вместо того, чтобы делать его программно. Как Вы упомянули, этот setupWithViewPager (), вызов сбрасывает текст и значок объектов вкладки к пустому указателю (Он использует тот же объект вкладки, просто сбрасывает его содержание). Я использовал Ваш подход, но сделал его более допускающим повторное использование. Вот мой код:

public class TabLayoutUtil {
    public static void setupTabLayoutWithViewPager(TabLayout tabLayout, ViewPager viewPager) {
        ArrayList<Pair<CharSequence, Drawable>> tabsContentCopy= new ArrayList<>();
        for (int i = 0; i < tabLayout.getTabCount(); i++) {
            TabLayout.Tab tab = tabLayout.getTabAt(i);
            tabsContentCopy.add(new Pair<>(tab != null ? tab.getText() : null, tab != null ? tab.getIcon() : null));
        }
        tabLayout.setupWithViewPager(viewPager);
        for (int i = 0; i < tabLayout.getTabCount(); i++) {
            if (i<tabsContentCopy.size()) {
                tabLayout.getTabAt(i).setText(tabsContentCopy.get(i).first);
                tabLayout.getTabAt(i).setIcon(tabsContentCopy.get(i).second);
            }
        }
    }
}
0
ответ дан 1 November 2019 в 10:01

Другие вопросы по тегам:

Похожие вопросы: