在第一个标签中,我有一个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 做一些事情,我尝试了很多解决方案但没有结果。我试着在我想做的事情上尽可能准确,请在这个问题上提供一些帮助。
答案 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);
}
}
};
对于粘性广播,清单中需要额外的权限。我不确定,但如果您交换发送广播和更改标签的顺序,也许您可以发送常规广播。