Intereting Posts
Как удалить выбранный элемент из списка с помощью CursorAdapter Как сделать многострочный график в режиме реального времени? Android: как получить какое-либо событие KeyPress с примером? В чем разница между LOAD_DEFAULT и LOAD_NORMAL для WebSettings? Robolectric: как протестировать SherlockActivity Устройство отключается в случайном порядке (и появляется несколько раз в автономном режиме) в Eclipse – исправления? Почему мой YouTube в веб-браузере играет только звук? Как получить клики на RecyclerView (НЕ дети) Есть ли способ отключить все элементы в определенном макете программно? Как проверить AlertDialog на Android? Как автоматически прокручивать линейную диаграмму MPAndroidChart? Как позиционировать Android ListView над представлением – не занимая полного места Android Manifest использует разрешения для Android-устройств Проблема с диалоговом диалоговом оповещении с текстом и редактированием текста Proguard, похоже, удаляет целые пакеты, которые включены в путь

Как получить представление вкладки TabLayout?

Я бы хотел найти представление Tab в TabLayout, чтобы передать его другой функции. Я не уверен, как найти мнение. myTabLayout.getTabAt(0).getCustomView() возвращает null.

Как получить представление?

 TabLayout tabLayout = (TabLayout) rootView.findViewById(R.id.tab_layout_main); tabLayout.addTab(tabLayout.newTab().setText("Page1")); tabLayout.addTab(tabLayout.newTab().setText("Page2")); viewPager = (ViewPager) rootView.findViewById(R.id.pager_main); pagerAdapter = new MyPagerAdapter(getActivity(), getChildFragmentManager(), tabLayout.getTabCount()); viewPager.setAdapter(pagerAdapter); 

В результате я получил следующее представление для просмотра вкладок. Я просто не уверен, что это лучшая практика или если она надежна во всех версиях Android:

 mainTab = ((ViewGroup) tabLayout.getChildAt(0)).getChildAt(desiredPosition); 

Посмотрев на источник, мы видим, что tabLayout.getChildAt(0) возвращает SlidingTabStrip который является внутренним классом, расширяющим LinearLayout который содержит представления вкладок. Затем вы можете получить доступ к представлению вкладки с помощью .getChildAt(desiredPosition) . Обратите внимание, что при использовании границ getChildAt() не проверяются, поэтому убедитесь, что вы вызываете правильные индексы, а также проверяете null .

Он возвращает null потому что вы не используете какой-либо пользовательский вид в первую очередь. Он возвращает пользовательский вид только тогда, когда вы его используете. Для использования пользовательского представления ваш код должен быть примерно таким.

 tabLayout.addTab(tabLayout.newTab().setCustomView(R.layout.custom_view).setText("Page1")); 

Если вы используете myTabLayout.getTabAt(0).getCustomView() выше строку и затем попытаетесь вызвать myTabLayout.getTabAt(0).getCustomView() , она вернет вам myTabLayout.getTabAt(0).getCustomView() представление.

  TabLayout tabLayout = .... (findview or code creation ) /** get selected tab index */ int selectedTabPosition = tabLayout.getSelectedTabPosition(); /** get tab for selected index or if u want any other tab set desired index */ TabLayout.Tab tabAt = tabLayout.getTabAt(selectedTabPosition); /** get view - but first u need set custom view on tabl via Tab.setCustomView(View) */ View tabView = tabAt.getCustomView(): 

подсказка:

  • Если вы заполняете TabLayout с ViewPager проверки ViewPager если ViewPager вид :). Если не установлен onLayoutChangedListener для ViewPager тогда настройте его с помощью пейджера!

Tab Источник, если вы хотите использовать отражения: D

 /** * A tab in this layout. Instances can be created via {@link #newTab()}. */ public static final class Tab { /** * An invalid position for a tab. * * @see #getPosition() */ public static final int INVALID_POSITION = -1; private Object mTag; private Drawable mIcon; private CharSequence mText; private CharSequence mContentDesc; private int mPosition = INVALID_POSITION; private View mCustomView; private final TabLayout mParent; Tab(TabLayout parent) { mParent = parent; } /** * @return This Tab's tag object. */ @Nullable public Object getTag() { return mTag; } /** * Give this Tab an arbitrary object to hold for later use. * * @param tag Object to store * @return The current instance for call chaining */ @NonNull public Tab setTag(@Nullable Object tag) { mTag = tag; return this; } /** * Returns the custom view used for this tab. * * @see #setCustomView(View) * @see #setCustomView(int) */ @Nullable public View getCustomView() { return mCustomView; } /** * Set a custom view to be used for this tab. * <p> * If the provided view contains a {@link TextView} with an ID of * {@link android.R.id#text1} then that will be updated with the value given * to {@link #setText(CharSequence)}. Similarly, if this layout contains an * {@link ImageView} with ID {@link android.R.id#icon} then it will be updated with * the value given to {@link #setIcon(Drawable)}. * </p> * * @param view Custom view to be used as a tab. * @return The current instance for call chaining */ @NonNull public Tab setCustomView(@Nullable View view) { mCustomView = view; if (mPosition >= 0) { mParent.updateTab(mPosition); } return this; } /** * Set a custom view to be used for this tab. * <p> * If the inflated layout contains a {@link TextView} with an ID of * {@link android.R.id#text1} then that will be updated with the value given * to {@link #setText(CharSequence)}. Similarly, if this layout contains an * {@link ImageView} with ID {@link android.R.id#icon} then it will be updated with * the value given to {@link #setIcon(Drawable)}. * </p> * * @param layoutResId A layout resource to inflate and use as a custom tab view * @return The current instance for call chaining */ @NonNull public Tab setCustomView(@LayoutRes int layoutResId) { return setCustomView( LayoutInflater.from(mParent.getContext()).inflate(layoutResId, null)); } /** * Return the icon associated with this tab. * * @return The tab's icon */ @Nullable public Drawable getIcon() { return mIcon; } /** * Return the current position of this tab in the action bar. * * @return Current position, or {@link #INVALID_POSITION} if this tab is not currently in * the action bar. */ public int getPosition() { return mPosition; } void setPosition(int position) { mPosition = position; } /** * Return the text of this tab. * * @return The tab's text */ @Nullable public CharSequence getText() { return mText; } /** * Set the icon displayed on this tab. * * @param icon The drawable to use as an icon * @return The current instance for call chaining */ @NonNull public Tab setIcon(@Nullable Drawable icon) { mIcon = icon; if (mPosition >= 0) { mParent.updateTab(mPosition); } return this; } /** * Set the icon displayed on this tab. * * @param resId A resource ID referring to the icon that should be displayed * @return The current instance for call chaining */ @NonNull public Tab setIcon(@DrawableRes int resId) { return setIcon(TintManager.getDrawable(mParent.getContext(), resId)); } /** * Set the text displayed on this tab. Text may be truncated if there is not room to display * the entire string. * * @param text The text to display * @return The current instance for call chaining */ @NonNull public Tab setText(@Nullable CharSequence text) { mText = text; if (mPosition >= 0) { mParent.updateTab(mPosition); } return this; } /** * Set the text displayed on this tab. Text may be truncated if there is not room to display * the entire string. * * @param resId A resource ID referring to the text that should be displayed * @return The current instance for call chaining */ @NonNull public Tab setText(@StringRes int resId) { return setText(mParent.getResources().getText(resId)); } /** * Select this tab. Only valid if the tab has been added to the action bar. */ public void select() { mParent.selectTab(this); } /** * Returns true if this tab is currently selected. */ public boolean isSelected() { return mParent.getSelectedTabPosition() == mPosition; } /** * Set a description of this tab's content for use in accessibility support. If no content * description is provided the title will be used. * * @param resId A resource ID referring to the description text * @return The current instance for call chaining * @see #setContentDescription(CharSequence) * @see #getContentDescription() */ @NonNull public Tab setContentDescription(@StringRes int resId) { return setContentDescription(mParent.getResources().getText(resId)); } /** * Set a description of this tab's content for use in accessibility support. If no content * description is provided the title will be used. * * @param contentDesc Description of this tab's content * @return The current instance for call chaining * @see #setContentDescription(int) * @see #getContentDescription() */ @NonNull public Tab setContentDescription(@Nullable CharSequence contentDesc) { mContentDesc = contentDesc; if (mPosition >= 0) { mParent.updateTab(mPosition); } return this; } /** * Gets a brief description of this tab's content for use in accessibility support. * * @return Description of this tab's content * @see #setContentDescription(CharSequence) * @see #setContentDescription(int) */ @Nullable public CharSequence getContentDescription() { return mContentDesc; } } 

Или вы можете напрямую подключить (через отражение):

 private final SlidingTabStrip mTabStrip; 

Или вы можете скопировать исходный код и изменить методы и поля по своему усмотрению.