1

私のアプリは起動時に多くのものをロードし、テスト後、最初は遅延が長すぎてsplash screen. splash screenそのため、アプリの読み込みが完了するまで a を表示したいと考えています。X 秒のタイマー付きの画面を表示したくありません。ここで例を見つけました:

Android スプラッシュスクリーン

上記の SO トピックのコードを実装しようとしましたが、コードがわかりません。それをコードに統合した後、以下のコードにコメントしたエラーが 1 つ出てきました。しかし、私は多くのコードを理解していません。混乱している部分の下のコードにコメントしました。

public class MainMenu extends Activity {

    private ProgressDialog pd = null;
    private Object data = null;  //What is this?

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.mainmenu);

        // show the ProgressDialog on this thread
        this.pd = ProgressDialog.show(this, "Working...", "Downloading data...", true, false);

        // start a new thread that will download all the data
        new DownloadTask().execute("Any parameters to download.");  //What is DownloadTask()?
    }

    private class DownloadTask extends AsyncTask<String, Void, Object> {

        protected Object doInBackground(String... args) {  //Are these parameters correct?
            return "replace this with your object";  //What is this?
        }

        protected void onPostExecute(Object results) {
            // pass the resulting data to the main activity
            MainMenu.this.data = result;  //Error:  "result cannot be resolved to a variable"

            if(MainMenu.this.pd != null) {
                MainMenu.this.pd.dismiss();
            }
        }
    }
}
4

2 に答える 2

4

エラーから始めましょう:

MainMenu.this.data = result;

タイプミスに気付きましたか?結果 *s* である必要があります。

MainMenu.this.data = results;

以下の残りの質問に対処します。

private class DownloadTask extends AsyncTask<String, Void, Object>

宣言は と呼ばれるインライン クラス用であり、へのパラメータとして( 経由で)DownloadTaskを取得することを示しています。StringString...doInBackground(String... params)

2番目のパラメーター(あなたの場合)は、 /Voidを介して進行状況を「公開」するために使用されるデータ型を示します。このメソッドは、たとえば、ファイルのダウンロードが完了したが、まだいくつかのファイルがある場合など、ユーザーに変更を通知するのに適しています。publishProgress(DATATYPE)onProgressUpdate(DATATYPE... progress)

最後のパラメータ ( ) は、この例でObjectは に渡すデータのタイプを示します。これは、どこかで ListAdapter を更新するか、 で実行されたアクションの結果に基づいて他の UI の変更をトリガーするためのいずれかです。onPostExecute(DATATYPE)ObjectdoInBackground

于 2013-03-04T16:19:29.617 に答える
2

メソッドで表示ProgressDialogして閉じるonPreexecuteonPostExcute

このようなもの

private class DownloadTask extends AsyncTask<String, Void, Object> {

           @Override
protected void onPreExecute() {
  mProgressDialog = new ProgressDialog(activity);
    mProgressDialog =ProgressDialog.show(activity, "", "Please Wait",true,false);
    super.onPreExecute();
}

        protected Object doInBackground(String... args) {  //Are these parameters correct?
            return "replace this with your object";  //What is this?
        }

        protected void onPostExecute(Object results) {
            // pass the resulting data to the main activity
            MainMenu.this.data = results;  //it should be results 
if (mProgressDialog != null || mProgressDialog.isShowing()){
         mProgressDialog.dismiss();
 }
            if(MainMenu.this.pd != null) {
                MainMenu.this.pd.dismiss();
            }
        }
于 2013-03-04T16:19:07.290 に答える