1

2 つの異なるレイアウトを表示できるアクティビティがあります。どちらのレイアウトも事前に定義されています (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

background を使用しない理由がない限り、とプログレス バーを使用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 に答える