1

各タブに 1 つずつTabActivity、4 つの個別の を使用しています。Activities

の 1 つはActivitiesListViewカスタム を持つArrayAdapterです。

問題は、Tab を押してこのビューに変更すると、ビューが変更される前にコンテンツが読み込まれ、読み込まれて解析されるActivityまで数秒間何も起こらないように見えることです。xml

例を探しましたが、これは私の最初の Android アプリケーションであり、フローを理解するのに苦労しています。

バックグラウンドスレッドでコンテンツを読み込んでいるときに、ビューを即座に変更できるコードを教えてください (ユーザーコンテンツが読み込まれていることを通知できます)

ありがとうございました

編集 - 既存の iOS アプリからコードを移植しています - この状況で UI スレッドがどのようにブロックされるかを理解していなかったため、また既存のコードの複雑さと、締め切り あまり構造を変えたくありませんでした。

あなたのコード Jennifer を見る前に問題を絞り込みましたが、それは私が使用した解決策なので、あなたのものを正しいとマークします。

これが他の人に役立つ場合に使用したものです。データロードをトリガーするために呼び出した関数をバックグラウンドスレッドに配置し、そのスレッドが作業を完了したときにコンテンツを表示する必要がありました

このクラスは私の中で宣言されました

public class TableView extends ListActivity

これまでにこれをやったことがなかったので、頭を悩ませるのは難しかったです;)

public class GetContentTask extends AsyncTask<Void, Void, Void> {


    private ProgressDialog pdialog;

    @Override
    protected void onPreExecute(){ 
       super.onPreExecute();
       pdialog = new ProgressDialog(TableView.this);
       pdialog.setTitle(progressDialogTitle);
       pdialog.setMessage(progressDialogMessage);
       pdialog.show();    
    }

    @Override
    protected void onPostExecute(Void result){
       super.onPostExecute(result);
       setUpAndLoadList(); // the function to display the list and fill it with content
       pdialog.dismiss();
    }


    @Override
    protected Void doInBackground(Void... params) {
        doInitialLoad(); // The function to load any xml data from server
        return null;
    }
 }
4

2 に答える 2

0

AsyncTask を使用するか、(おそらく) 別のスレッドを使用します。

http://developer.android.com/reference/android/os/AsyncTask.html

また、2 セントを投入して、TabActivity を使用しないでください。タブのように見える独自のボタンを用意するだけですが、それはこのトピックにとってそれほど重要ではありません。

于 2011-11-21T01:38:24.303 に答える
0

進行状況ダイアログを使用できます(ユーザーコンテンツがロード中であることを通知できます)

ProgressDialog dialog;

private class XMLOperation extends AsyncTask<String, Void, String> {

/*
     * (non-Javadoc)
     * 
     * @see android.os.AsyncTask#onPreExecute()
     */
    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();

        System.out.println("onPreExecute");

        dialog= ProgressDialog.show(mContext, "", "Loading Content....");
              dialog.setCancelable(false);


    }




        @Override
    protected String doInBackground(String... urls) {

            //do your Background task

    }




protected void onPostExecute(String result) {   //dismiss dialog
        try {
if(dialog.isShowing()){
        dialog.dismiss();
        }



        } catch (Exception exception) {
        dialog.dismiss();
        }
        }
于 2011-11-21T07:01:40.857 に答える