Изменить текст на вкладке Android

У меня есть приложение для Android с 3 вкладками в TabHost (текстовые метки, без изображений). Я настроил вкладки так:

intent = new Intent().setClass(this, AnnouncementsActivity.class);
spec = tabHost.newTabSpec("news").setIndicator("News").setContent(intent);
tabHost.addTab(spec);

Я запускаю фоновый поток для получения объявлений с моего сервера и хочу обновить текстовую метку на вкладке, чтобы сообщить пользователю, сколько есть новых объявлений. Например, я хочу изменить текст на вкладке на «Новости (3)». Как я могу получить доступ и изменить текстовую метку на вкладке?

Любые предложения приветствуются!


person Kenny Wyland    schedule 09.10.2010    source источник


Ответы (4)


Посмотрите код, продемонстрированный здесь, посмотрите, в конце кода есть хакерский способ получить текстовое представление.

person Community    schedule 09.10.2010
comment
Спасибо за ответ. У меня нет проблем с доступом к TabHost, моя проблема в том, что я не могу найти в TabHost ничего, что позволило бы мне изменить текст на вкладке. Как изменить текст, если у меня есть ссылка на TabHost? - person Kenny Wyland; 10.10.2010
comment
Хорошо, спасибо за ссылку. Вы правы, это действительно хакерство, и я не уверен, почему нет более простого способа, но он работает для меня, так что пока сойдет. Спасибо еще раз! - person Kenny Wyland; 10.10.2010

Вы можете сделать это так

TabHost tabHost = getTabHost();
TextView tv = (TextView) tabHost.getTabWidget().getChildAt(0).findViewById(android.R.id.title);
tv.setText("New Tab Text");

Если android.R.id.title генерируется системой, просто измените ChildIndex и Text в соответствии с вашими потребностями.

person Azhar    schedule 18.08.2013
comment
Для меня это дает исключение нулевого указателя для textView. Не могли бы вы объяснить это для меня? - person Parthiban M; 08.03.2016
comment
@ParthibanM, пожалуйста, смотрите мой пост ниже как возможное решение вашего исключения нулевого указателя. - person oddmeter; 14.06.2016

Для более поздней версии Android (5.1) это сработало для меня:

Обратите внимание, что в этом примере изменяется только текст первой вкладки. Подстроиться под произвольную вкладку не составит особого труда.

FragmentTabHost tabHost = (FragmentTabHost)view.findViewById(android.R.id.tabhost);
AppCompatTextView tv = null;
RelativeLayout parentLayout = (RelativeLayout)tabHost.getTabWidget().getChildAt(0);

for (int i = 0; i < parentLayout.getChildCount(); i++) {

    View tempView = parentLayout.getChildAt(i);

    if (tempView instanceof AppCompatTextView) {
        tv = (AppCompatTextView)tempView;
    }
}

if (tv != null) {
    tv.setText("Your updated text goes here");
}

Все, что я сделал, это прогнал его через отладчик и выяснил иерархию. Я не мог заставить android.R.id.title работать, так как на текстовое представление теперь ссылается другой идентификатор. В любом случае, теперь это также AppCompatTextView вместо простого старого TextView.

Опять же, это неоптимально, но дает желаемый результат для более поздних версий андроида.

Надеюсь это поможет!

person oddmeter    schedule 14.06.2016

Недавно мне нужно изменить текст TabHost, и я решил проблему, используя следующий код.

Пожалуйста, извините за мой английский, я бразилец, и я все еще учусь. Надеюсь помочь тому, у кого такая же проблема.

TabHost host = (TabHost)findViewById(R.id.tabDetail);
    host.setup();

    //Tab 1
    TabHost.TabSpec spec = host.newTabSpec("tab1");
    spec.setContent(R.id.tab1);
    spec.setIndicator("Details");
    host.addTab(spec);

    //Tab 2
    spec = host.newTabSpec("tab2");
    spec.setContent(R.id.tab2);
    spec.setIndicator("Comments");
    host.addTab(spec);
person Helber Fernandes    schedule 27.08.2017