Frage

Ist es möglich, die tabWidget -Symbole/-anzeigen zu aktualisieren? Wenn ja, wie, wenn Sie Tabcontent durch Absichten erstellen?

Bearbeitet unten mit Antwort dank @Bart

Generischer Code:

Hauptaktivität:

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+")");
}

}

ONEATAKTIVITÄT (MOKINAKTIVITÄT):

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);

        }
    });
}

}

Ich möchte die Nummer im Registerkarte zeigen

War es hilfreich?

Lösung

Es ist möglich, aber es ist ein bisschen schwierig:

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

Sie sollten auf Indizes achten, während Sie GetChildat () anrufen. Der beste Weg ist immer, zu debuggen und zu überprüfen.

Da 1.6 Tabwidget eine Methode hat, dank der erste Zeile und schreiben Sie: Schreiben:

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




Ich füge auch den Quellcode von Android SDK hinzu, um anzuzeigen, wie tabWidget -Symbole erstellt werden:

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);

Wie Sie sehen können, enthält es eine Textansicht und ImageView.

Andere Tipps

Versuchen Sie, das ImageView so zu erhalten

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

v.setImageDrawable(getResources().getDrawable(R.drawable.newIcon));

Angesichts einer Arrays für Titel und Ikonen

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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top