1

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

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

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

我不确定我应该采取什么方法,(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();
    }
}
4

1 回答 1

2

除非你有理由不使用背景Thread,否则我建议使用AsyncTask和使用进度条。在您获得数据之前,它会比使用假人Layout作为占位符更便宜。你说它不会被使用,但只有 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
    }

您显然知道,AsyncTask这里是面向未来访问者的文档,它有一个使用ProgressDialog.

笔记

因为它不是一个内部类,如果你要从那里展示你,你只需要将你的构造函数传递给你Context的构造函数。AsyncTaskProgressDialog

于 2013-03-07T00:37:50.150 回答