Android 一个活动,两个视图。如何以及在何处对第二个视图进行充气?

Android 一个活动,两个视图。如何以及在何处对第二个视图进行充气?,android,xml,layout-inflater,Android,Xml,Layout Inflater,我有一个活动,可以显示两种不同的布局。这两种布局都是预定义的(XML)。基本上,如果满足条件,则应显示布局a。如果条件失败,则应显示布局B 布局A是一个简单的线性布局——可以说,它是我的主要“形式”。 布局B是一个简单的相对布局-它是一个占位符,直到可以下载一些数据。下载数据(并发送通知)后,我想删除布局B并显示布局a 我尝试在我的活动的onResume()方法中调用布局B上的invalidate()方法,但这不起作用 我不确定我应该采取什么方法,(1)在哪里“正确”切换布局,以及(2)如何显示

我有一个活动,可以显示两种不同的布局。这两种布局都是预定义的(XML)。基本上,如果满足条件,则应显示布局a。如果条件失败,则应显示布局B

布局A是一个简单的线性布局——可以说,它是我的主要“形式”。 布局B是一个简单的相对布局-它是一个占位符,直到可以下载一些数据。下载数据(并发送通知)后,我想删除布局B并显示布局a

我尝试在我的
活动
onResume()
方法中调用布局B上的
invalidate()
方法,但这不起作用

我不确定我应该采取什么方法,(1)在哪里“正确”切换布局,以及(2)如何显示布局。我假设我需要充气布局A当我的条件得到满足,但我不是100%肯定这一点

编辑: 我的
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();
    }
}

除非您有理由不使用后台
线程
,否则我建议使用
异步任务
和进度条。在获取数据之前,它将比使用虚拟布局作为占位符花费更少。你说只有1%的时间不会用。在我看来这是浪费

 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
    }
公共类TalkToServer扩展异步任务{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的void onProgressUpdate(字符串…值){
super.onProgressUpdate(值);
}
@凌驾
受保护的字符串doInBackground(字符串…参数){
//你在这里工作吗
归还某物;
}
@凌驾
受保护的void onPostExecute(字符串结果){
super.onPostExecute(结果);
//在此处处理数据显示数据或发送到mainactivity
}
您显然知道
AsyncTask
,但对于未来的访问者,它有一个使用
ProgressDialog
的示例

注意


由于它不是一个内部类,如果要从那里显示
ProgressDialog
,您只需将
上下文
传递给
AsyncTask
的构造函数即可。

下载数据需要多长时间,为什么不将
AyncTask
ProgressDialog
一起使用呢一个小数据量,通常在20秒内下载(甚至在Sprint 3G上)。我使用<代码> AycCastase<代码>来获取数据。我确实没有考虑从<代码> AycCastase<代码>中创建<代码> PraseStReule<代码>,因为它在外部java类(即不是公共内部类)中。。最初是这样,但后来我需要从应用程序的另一部分调用它,所以我将其作为一个外部类。我仍然认为您最好这样做。我不确定作为一个外部类有什么关系。这可能无关紧要。我在了解Java之前就这么做了。我会尝试您的答案。感谢您成为一个发声板帮助我。