动态跳转到选项卡并同时更改其内容?

时间:2011-11-17 21:39:17

标签: android android-listview android-tabhost

在第一个标签中,我有一个listview,从中我提取一个字符串,在第二个标签中我有一个textview。当我单击列表中的项目时,我应该进入第二个选项卡,并且字符串值应该显示在textview中。

public static String mystring;
protected void onListItemClick (ListView l, View v, int position, long id){
    super.onListItemClick(l, v, position, id);
    mystring = listofHashMap.get(position).get("keyname").toString(); //it's ok here
    Intent intent=new Intent(this, MyActivity.class);
    startActivity(intent);
}

上面的代码(放在ListViewActivity中)是我尝试过的并且它可以工作(但 MyActivity 不再是tabcontent,它是一个全屏独立活动),具有以下代码片段在MyActivity中:

tv = (TextView)findViewById(R.id.tvid);
lv = new ListViewActivity();
tv.setText(lv.mystring);

但是,正如我所说,我希望 MyActivity 成为一个tabcontent,所以我试过这个:

 public MyTabActivity taba = new MyTabActivity();
 protected void onListItemClick (ListView l, View v, int position, long id){
    super.onListItemClick(l, v, position, id);
    mystring = listofHashMap.get(position).get("keyname").toString();
    int i=1;//the tab where I want to go, and MyActivity is its content 
    taba.ChangeTab(i);
}

ChangeTab() MyTabActivity (扩展TabActivity的活动)中的静态方法,它只是 setCurrentTab(i)

所以,这样做, MyActivity 将始终显示首次点击的项目的名称,即使我在列表中选择其他项目。我相信我要做的是 setContent( )再次为 MyActivity 或使用静态字符串mystring 做一些事情,我尝试了很多解决方案但没有结果。我试着在我想做的事情上尽可能准确,请在这个问题上提供一些帮助。

1 个答案:

答案 0 :(得分:0)

我的建议是使用广播。我认为时机需要一个粘性广播。也许是这样的:

public MyTabActivity taba = new MyTabActivity();
protected void onListItemClick (ListView l, View v, int position, long id){
    super.onListItemClick(l, v, position, id);
    mystring = listofHashMap.get(position).get("keyname").toString();

    // create the intent to send and give it the data
    Intent i = new Intent("updateTextView");
    i.putExtra("textFromList", mystring);
    sendStickyBroadcast(i);

    int i=1;//the tab where I want to go, and MyActivity is its content 
    taba.ChangeTab(i);
}

然后在MyActivity中,写下这样的内容:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // your onCreate method
    registerReceiver(updateTextReceiver, new IntentFilter("updateTextView"));
}

protected void onDestroy() {
    super.onDestroy();
    // your onDestroy method
    unregisterReceiver(updateTextReceiver);
}

private BroadcastReceiver updateTextReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        tv = (TextView)findViewById(R.id.tvid);
        String myString = intent.getStringExtra("textFromList");
        if (myString != null) {
            tv.setText(myString);
        }
    }

};

对于粘性广播,清单中需要额外的权限。我不确定,但如果您交换发送广播和更改标签的顺序,也许您可​​以发送常规广播。