2011-11-17 46 views
0

在第一個選項卡中,我從中提取了一個字符串,並在第二個選項卡中有一個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(ⅰ)內的靜態方法。

所以,這樣做,MyActivity將始終顯示第一個點擊的項目的名稱,即使我在列表中選擇其他項目then.I相信的是什麼,我需要做的就是setContent()再次MyActivity或做一些與靜態字符串mystring,我已經嘗試了許多解決方案,但沒有結果。我試圖儘可能準確地處理我想要做的事情,請在這個問題上提供一些幫助。

回答

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

}; 

對於粘廣播,有一個在清單中需要額外的許可。我不確定,但如果您更改發送廣播和更改標籤的順序,也許您可​​以發送定期廣播。

+0

優秀!我印象深刻:)需要的權限是:。它是一個非常簡單和優雅的解決方案。 PS:我試圖用TabContentFactory()和createTabContent()來解決它,我有興趣知道,作爲未來的解決方案,如果可以這樣做,你說什麼? – AlexAndro

+0

我不知道這個解決方案。我不確定它會對你有用,因爲該方法返回一個View,而且我的理解是你希望啓動MyActivity。 –