Динамически обновлять иконки TabWidget?

1

Возможно ли обновить значки/индикаторы TabWidget? Если да, то как, когда вы создаете TabContent через намерения?

Ниже перечислены ответы с помощью @Bart

Общий код:

MainActivity:

public class TestActivity extends TabActivity {

public int i;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //TabHost mTabHost = (TabHost) findViewById(android.R.id.tabhost);

    TabHost mTabHost = getTabHost();

    mTabHost.addTab(mTabHost.newTabSpec("tab1").setContent(
            new Intent(this, OneActivity.class)).setIndicator("One"));
    mTabHost.addTab(mTabHost.newTabSpec("tab2").setContent(
            new Intent(this, TwoActivity.class)).setIndicator("Two"));

    changeTitle(0, 20);
}

public void changeTitle(int cnt, int i){
    View v = getTabWidget().getChildAt(cnt);
    TextView tv = (TextView) v.findViewById(android.R.id.title);
    tv.setText("One ("+i+")");
}

}

OneActivity (ChildActivity):

public class OneActivity extends Activity {
TextView tv;
Button btn;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.one);

    tv = (TextView) findViewById(R.id.tv);
    btn = (Button) findViewById(R.id.btn);

    btn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            int i = Integer.parseInt((String) tv.getText());
            i++;
            tv.setText(""+i);

             TestActivity parent = OneActivity.this.getParent();
             parent.changeTitle(0,i);

        }
    });
}

}

Я хотел бы показать номер в заголовке вкладки

Теги:
tabwidget
tabactivity

3 ответа

3
Лучший ответ

Возможно, но это немного сложно:

ViewGroup vg = (ViewGroup) getTabHost().getTabWidget().getChildAt(0);
TextView tv = (TextView) vg.getChildAt(1);

Вы должны обратить внимание на индексы при вызове getChildAt(). Лучший способ - всегда отлаживать и проверять.

Так как 1.6 TabWidget имеет метод getChildTabViewAt, благодаря которому вы можете пропустить первую строку и написать:

ViewGroup vg = (ViewGroup) getTabHost().getTabWidget().getChildTabViewAt(0);




Я также добавляю исходный код Android SDK, чтобы показать, как создаются значки TabWidget:
View tabIndicator = inflater.inflate(R.layout.tab_indicator, 
mTabWidget, // tab widget is the parent
false); // no inflate params

final TextView tv = (TextView) tabIndicator.findViewById(R.id.title);
tv.setText(mLabel);
final ImageView iconView = (ImageView) tabIndicator.findViewById(R.id.icon); 
iconView.setImageDrawable(mIcon);

Как вы можете видеть, он содержит TextView и ImageView.

  • 0
    Обратите внимание, что ваш «исходный код Android SDK» предназначен для какой-то конкретной версии, и этот код может измениться, и поэтому вы не хотите полагаться на эту реализацию.
  • 0
    Как передать значение из OneActivity в MainActivity (расширяет TabActivity)?
Показать ещё 3 комментария
2

Попробуйте получить изображениеView как это

ImageView v = (ImageView)tabActivity.getTabHost().getTabWidget().getChildTabViewAt(i).findViewById(android.R.id.icon);

v.setImageDrawable(getResources().getDrawable(R.drawable.newIcon));
  • 1
    пожалуйста, отформатируйте ваш код соответствующим образом. Спасибо!
0

Для массивов для заголовков и значков

for (int i = 0; i < numTabs; i++ ) {
    TabSpec spec = host.newTabSpec(String.valueOf(i)); //sets tab index
    Drawable icon = res.getDrawable(icons[i]);  //sets the icon
    // set tab text and icon
    spec.setIndicator(titles[i], icon);  //sets the title

    host.addTab(spec);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню