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