2013-03-07 44 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一个内部类。

相关问题