Android 动态更新TabWidget图标?

Android 动态更新TabWidget图标?,android,tabwidget,tabactivity,Android,Tabwidget,Tabactivity,是否可以更新TabWidget图标/指示器?如果是这样,当您通过意图创建TabContent时,如何创建 感谢@Bart编辑下面的答案 通用代码: 主要活动: public class TestActivity extends TabActivity { public int i; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

是否可以更新TabWidget图标/指示器?如果是这样,当您通过意图创建TabContent时,如何创建

感谢@Bart编辑下面的答案

通用代码:

主要活动:

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(儿童活动):

}


我想在选项卡标题中显示数字,这是可能的,但有点棘手:

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

如您所见,它包含文本视图和图像视图。

这是可能的,但有点棘手:

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

如您所见,它包含文本视图和图像视图。

给定了标题和图标的数组

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);
}
for(int i=0;i
给出了标题和图标的数组

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);
}
for(int i=0;i
尝试像这样获取图像视图

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

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

尝试像这样获取imageView

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

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

请注意,您的“Android SDK源代码”是针对某个特定版本的,该代码可能会更改,因此您不想依赖该实现。如何将值从OneActivity传递到MainActivity(extends TabActivity)?我同意使用getChildAt()可能无法在每个SDK上工作。我写道这很棘手。自从我测试了它之后,它在1.6-2.1版本中肯定能工作@Sameer Segal:您可以通过调用TabActivity MainActivity=(TabActivity)OneActivity.getParent()从OneActivity获取对MainActivity的引用;我想我错过了一步。我已经更新了上面的代码,但找不到函数OneActivity.getParent()。我已经找到了它——谢谢Bart!用答案更新了我的问题。请注意,您的“Android SDK源代码”是针对某个特定版本的,代码可能会更改,因此您不想依赖该实现。如何将值从OneActivity传递到MainActivity(extends TabActivity)?我同意使用getChildAt()可能无法在每个SDK上工作。我写道这很棘手。自从我测试了它之后,它在1.6-2.1版本中肯定能工作@Sameer Segal:您可以通过调用TabActivity MainActivity=(TabActivity)OneActivity.getParent()从OneActivity获取对MainActivity的引用;我想我错过了一步。我已经更新了上面的代码,但找不到函数OneActivity.getParent()。我已经找到了它——谢谢Bart!用答案更新了我的问题。