2010-07-29 72 views
4

我用三個選項卡定義了一個HomeActivity,每個選項卡都是一個單獨的活動。我在android開發人員站點中使用了該示例。 http://developer.android.com/resources/tutorials/views/hello-tabwidget.htmlAndroid - Tab Navigation <跨越一項新活動>

選項卡B(第二個選項卡)UI包含文本和按鈕(名爲Search)。當用戶單擊搜索按鈕時,它應聯繫REST Web服務並將結果顯示爲列表。

爲了做到這一點,在TAB B活動中,單擊按鈕時,我調用創建意圖並調用新的SearchResultsActivity(以後稱爲SRA)的方法。在SRA(擴展列表活動) ,我有邏輯,用於連接到互聯網服務和解析JSON返回結果爲list.I我能做到這一點functionality.But我在這裏看到一些缺點,顯示的結果和我的問題是:

  • 定義新的活動(SRA)來處理搜索結果是否正確?或者它會更好地讓它在TAB B活動本身中處理?我爲什麼要進行單獨活動的主要原因是,SRA擴展了ListActivity,如果我想將它顯示爲List並且TabB只是將Activity展開, wouldnt允許顯示結果。所以,有沒有更好的方法來做到這一點?

  • 鑑於上述實施,當我從塔布導航(點擊搜索按鈕)SRA,標籤都沒有見過anymore.As塔布在呼喚一個新的活動( 意向srchIntent =新意圖(TabB.this,SearchResultActivity .class); TabB.this.startActivity(srchIntent);),標籤消失。在這種情況下,什麼可能是最好的解決方案,以便標籤B出現/結果?

  • 從TabB導航到SRA時,我試圖顯示一個進度對話框/加載在調用StartActivity之前定義的TabB,然後取消它。但加載圖標不會出現。我試圖顯示對話框並取消SRA,但加載不會出現。

+0

我想做同樣的事情。你是如何解決你的問題的? – Slavo 2011-05-12 19:52:30

回答

0

嘿巴拉,我不得不說的是:

1)這將是最好的TAB B伸出的ListActivity和一個輔助類進行搜索。這樣你就可以使你的代碼更加獨立。

2)實施1),你會沒事的。

3)當你開始請求時,你應該顯示一個進度對話框,並在你得到結果時停止它。我會實現一個廣播接收器來實現這一點(如果您選擇這樣做,我可以幫助您)。

0

有實現這個目標的兩種方法..

無論什麼時候開始你的另一個活動(即搜索活動),只是在此之前,設置您的搜索活動,向您所需的選項卡。您可以通過獲取TabActivity的實例(即您正在擴展此類的活動)並調用new Intent().setClass(TABACTIVITY_INSTANCE,ACTIVITY YOU_WANT_TO_SET_TO_THIS_TAB)來實現此目的。但作出會員類的意圖不同的對象..不要做這樣的事情這樣的(new Intent().setClass())

將no intent對象聲明爲no所持有的選項卡,然後使用setClass方法。 (這將解決您的標籤消失的問題)

現在從服務器獲取數據,我建議你實現AsyncTask(適用於Android的精彩API):

private class DownloadImageTask extends AsyncTask<String, Void, String> 
{ 
    AbousUsHandler aboutHandeler; 

    @Override 
    protected void onPreExecute() 
    { 
     mProgress.setMessage("Please wait"); 
     mProgress.show(); 
     super.onPreExecute(); 
    } 

    protected String doInBackground(String... urls) 
    { 
     /* Do you your background task i.e. getting data from server 
      but don't do ui related things here as this method is called in Thread 
      pool not on Android Ui thread.*/ 

     return null; 
    } 

    protected void onPostExecute(String result) 
    { 
     try 
     { 
      mProgress.dismiss(); 
      /* set Your List View Adapter here */ 
     } 
    } 
} 

從UI線程執行此只需撥打new DownloadImageTask().execute()即可。

首先會調用preExecute,然後調用doInBackground,當您從服務器獲取數據時,onPostExecute將被調用。

我希望這可以解決您的問題。

相關問題