在 TabHost 中重新加载选项卡内容

Posted

技术标签:

【中文标题】在 TabHost 中重新加载选项卡内容【英文标题】:Reload tab content in TabHost 【发布时间】:2012-08-26 16:11:30 【问题描述】:

我有一个带有 2 个标签的 Tabview,在我的 TabActivity 中有一个按钮。单击按钮时,我想将数据发送到当前选项卡并将数据显示到当前选项卡。当我烤这个数据时,数据是可用的,但是当我把这个数据设置为 textview 时,我的 textview 没有改变。如何从 tabhost 活动刷新我的标签内容? (对不起我的英语不好:P)这是我的代码:

public class MainActivity extends TabActivity 

TabHost tabHost;

@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    tabHost = getTabHost();
    Bundle b = new Bundle();
    b.putInt("category_id", 10);

    Intent tab1Intent = new Intent(this, Tab1Activity.class).putExtras(b);
    TabSpec tab1Spec = tabHost
            .newTabSpec("Tab1")
            .setIndicator("Tab1",
                    getResources().getDrawable(R.drawable.credit_tab_icon))
            .setContent(tab1Intent);
    tabHost.addTab(tab1Spec);

    Intent tab2Intent = new Intent(this, Tab2Activity.class);
    TabSpec tab2Spec = tabHost
            .newTabSpec("Tab2")
            .setIndicator("Tab2",
                    getResources().getDrawable(R.drawable.credit_tab_icon))
            .setContent(tab2Intent);
    tabHost.addTab(tab2Spec);

    for(int i=0;i<tabHost.getTabWidget().getChildCount();i++)
    
        tabHost.getTabWidget().getChildAt(i).getLayoutParams().height = 80;
    
    tabHost.getTabWidget().setCurrentTab(0);

    Button ok   =   (Button) findViewById(R.id.ok);
    ok.setOnClickListener(new OnClickListener()
        public void onClick(View v) 
            Bundle bundle = new Bundle();
            bundle.putInt("category_id",103);
            LocalActivityManager manager            =   getLocalActivityManager();
            String currentTag                       =   tabHost.getCurrentTabTag();
            Class<? extends Activity> currentClass  =   manager.getCurrentActivity().getClass();
            manager.destroyActivity(currentTag, true);
            manager.startActivity(currentTag, new Intent(MainActivity.this, currentClass).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP).putExtras(bundle));
        
    );


@Override
public void onResume() 
    super.onResume();

这是我的 Tab1Activity:

public class Tab1Activity extends Activity 
public static Tab1Activity s_childActivity;

@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tab1);


public void onResume() 
    super.onResume();
    Bundle extras = this.getIntent().getExtras();
    int get_category_id = extras.getInt("category_id");
    Toast.makeText(this, "category_id = " + get_category_id,
            Toast.LENGTH_SHORT).show();


    TextView textView1  =   (TextView)this.findViewById(R.id.textView1);
    textView1.setText("Berubah"+get_category_id);//==> Textview not change with category_id

【问题讨论】:

【参考方案1】:

试试这个代码。

getTabHost().invalidate()

它应该再次重绘选项卡,因此它们的内容会得到更新。

【讨论】:

【参考方案2】:

您可以像这样在按钮 onClick 中获取当前选项卡并刷新 TextView:

if (getCurrentActivity() instanceof Tab1Activity ) 
                                    ((TextView)((ProductListTab) getCurrentActivity())
                                                     .findViewById(R.id.textView1)).setText("103");
                                

【讨论】:

以上是关于在 TabHost 中重新加载选项卡内容的主要内容,如果未能解决你的问题,请参考以下文章

在 tabhost 中重新加载一个活动

如何从 TabHost 中删除选项卡

以角度切换选项卡时保持选项卡状态

微信小程序swiper切换选项卡,每个选项卡内容不一样,,怎么让item的高度自适应

实现选项卡的原理

选项卡内容布局显示在其他选项卡中