У меня есть активность, определяемую:Как получить содержимое вкладки в TabHost?
<LinearLayout
android:id="@+id/TabContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="99"
android:orientation="vertical">
<TabHost
android:id="@+android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/TabLinearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TabWidget
android:id="@+android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"></TabWidget>
<FrameLayout
android:id="@+android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"></FrameLayout>
</LinearLayout>
</TabHost>
</LinearLayout>
В основном это TabHost с TextViews как содержание. Я строю вкладки и содержимое этих TextViews динамически с помощью createTabContent(). Это прекрасно работает. Но при некоторых обстоятельствах (некоторые события, обработанные AsyncTask с помощью TCP-сокета), мне нужно изменить содержимое некоторых из этих TextView.
Я убежден, что моя проблема - результат моей неопытности с Android SDK, но я не могу найти способ перебрать TabHost и получить контент для каждого из этих текстовых элементов.
«наиболее» подход, который я достиг является:
TabHost th = (TabHost) findViewById(android.R.id.tabhost);
TabWidget tw = th.getTabWidget();
for (int i = 0; i < tw.getChildCount(); i++) {
LinearLayout lLayout = (LinearLayout) tw.getChildAt(i);
TextView tv = ((TextView) lLayout.getChildAt(i));
tv.append(linea);
}
Но что это делает, чтобы добавить, что «Linea» к имени вкладки (на индикаторе). Я хочу добавить его в содержание этой вкладки, но я не могу найти способ получить связанный с ним TextView.
Любые идеи будут очень благодарны!
--------- --------- EDIT
Хотя в комментарии ниже я разместил, что у меня уже было решение, я узнал, что это не действует. Код теперь выглядит так:
for (int i = 0; i < tw.getChildCount(); i++) {
LinearLayout LLayout = (LinearLayout) tw.getChildAt(i);
TextView currenttab = (TextView) LLayout.getChildAt(0);
if (tab.equals(currenttab.getText())) {
th.setCurrentTab(i);
TextView tabContent = (TextView) th.getTabContentView().getChildAt(0);
tabContent.append(linea);
return true;
}
}
Проблема заключается в том, что getTabContentView() ссылка только на активную вкладку в данный момент, так что если я хочу, чтобы добавить текст к невыбранной вкладке TextView, я должен выберите это ранее с .setCurrentTab (i), что означает, что я буду менять активную вкладку ...
Я думаю, что это должно быть намного проще, чем я думаю ... Любая помощь с этим ?
Спасибо!
--------- --------- EDIT
В этот момент я понял, что доступ к содержимому вкладки неактивной не является возможным. По крайней мере, не так. Предположительно, вы не можете получить доступ к виду неактивной вкладки, потому что у него нет связанного представления, по крайней мере, не публичного.
Я попытался объявить карту, где первая строка - это имя вкладки, а вторая - это TextView, связанная с ее содержимым, и назначить их в момент создания вкладки. В результате я смог ссылаться только на TextView активной вкладки, другие - на исключение NullPointer.
Поэтому я сфокусировал проблему по-разному. Теперь, если мне нужно добавить текст в неактивную вкладку, я добавляю этот текст в Hash, я объявляю OnTabChangeListener, и каждый раз, когда я меняю вкладку, я отбрасываю в нее ожидающий контент.
Это не самое блестящее решение, но это единственный, с которым я работал ... так что если у кого-то есть лучшее решение, я буду благодарен.
В моем случае он возвращает RelativeLayout без необходимых элементов управления. – CoolMind