2013-03-07 46 views
1

我有一項活動可以顯示兩種不同的佈局。這兩種佈局都是預先定義的(XML)。基本上,如果滿足條件,則應該顯示佈局A.如果條件失敗,則應顯示佈局B.一個活動,兩個視圖。如何以及在哪裏誇大第二個視圖?

佈局A是一個簡單的線性佈局 - 這是我的主要「形式」,可以這麼說。 佈局B是一個簡單的相對佈局 - 它是一個佔位符,直到可以下載一些數據。一旦數據被下載(併發送一個通知),然後我想刪除佈局B和顯示佈局A.

我試過呼籲佈局B的invalidate()方法在我Activity但沒有按的onResume()方法沒有工作。 (1)哪裏「正確」切換佈局,以及(2)我應該如何去顯示它。我不知道我應該採取什麼方法。我假設我需要在滿足條件的情況下對佈局A進行充氣,但我對此並不十分確定。

編輯: 剪斷我onCreate()方法:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.layoutA); // will happen 99% of the time 
    ... 
    if (!dbHelper.tableIsPopulated()) { 
     setContentView(R.layout.layoutB); // show placeholder bc no data exists 
     getData(); 
    } 
} 
+0

數據需要下載多長時間,爲什麼不只是使用帶'ProgressDialog'的'AyncTask'? – codeMagic 2013-03-07 00:27:16

+0

這是一小部分數據,通常在不到20秒內下載(即使在Sprint 3G上)。我正在使用'AsyncTask'來獲取數據。我真的不考慮從AsyncTask創建'ProgressDialog',因爲它在外部Java類(即不是公共內部類)中。 – acedanger 2013-03-07 00:35:12

+0

原來是這樣,但是之後我需要從應用程序的另一部分調用它,所以我將它作爲一個外部類。 – acedanger 2013-03-07 00:36:44

回答

2

除非你有一個理由不使用背景Thread,我建議使用AsyncTask並使用進度條。在獲取數據之前,使用虛擬Layout作爲佔位符的成本會更低。你說它不會被使用,但是有1%的時間。好像約AsyncTaskHere are the Docs爲今後遊客在我看來

public class TalkToServer extends AsyncTask<String, String, String> { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
     } 

     @Override 
     protected void onProgressUpdate(String... values) { 
      super.onProgressUpdate(values); 

     } 

     @Override 
     protected String doInBackground(String... params) { 
     //do your work here 
      return something; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      super.onPostExecute(result); 
       // do something with data here-display it or send to mainactivity 
    } 

你顯然知道的浪費,而且還具有使用ProgressDialog的例子。

注意

既然不是你只需要通過你的ContextAsyncTask的構造函數,如果你打算從那裏顯示您的ProgressDialog一個內部類。

相關問題