2013-03-04 3 views
1

내 앱은 시작할 때 많은 것을로드하며 테스트를 마친 후에는 처음에 너무 오래 지연되어 splash screen이되지 않습니다. 따라서 앱로드가 완료 될 때까지 splash screen을 표시하고 싶습니다. X 초 동안 타이머가있는 화면을 표시하고 싶지 않습니다.앱이 완료 될 때까지 스플래시 화면을 표시합니다.

Android SplashScreen

내가 위의 SO 항목의 코드를 구현하려하지만, 난 그냥 코드를 이해하지 : 여기 예를 발견했다. 내 코드에 통합 한 후 아래 코드에 주석을 달았습니다. 그러나 나는 많은 코드를 이해하지 못하고 내가 혼란스러워하는 부분 아래 코드에 주석을 달았습니다. 이

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(); 
      } 
     } 
+1

이것은 맹목적으로 일부 코드를 가져 와서 실행하지 않아야하는 이유입니다. 당신이하고있는 일과 코드의 각 부분이 무엇인지 아는 후에 만 ​​그것을 이해하고 사용해야합니다. 나는 당신이 안드로이드 기초 (특별히 [AsyncTask] (http://developer.android.com/reference/android/os/AsyncTask.html))를 배우고 코드를 다시 이해하려고 노력할 것을 제안한다. 나는 당신이 혼자서 거의 모든 것을 대답 할 수있을 것이라고 확신합니다. – SudoRahul

답변

3

같은

뭔가

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(); 
      } 
     } 
    } 
} 
+0

죄송합니다! 고정 및 고마워요 :) – Matt

+0

자세한 내용과 함께 게시물을 업데이 트했습니다! – ninetwozero

2

표시 onPreexecute에서 ProgressDialogonPostExcute 방법에 해고가의 오류 시작하자 :

MainMenu.this.data = result; 

공지 사항 오타? 그것은해야한다 결과 * S * 아래 질문의 나머지 부분을 해결

MainMenu.this.data = results; 

:

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

선언은 DownloadTask라는 인라인 클래스이며, 그것은 당신이 String을 맡게 될 거 야한다고 s (String... 경유)를 귀하의 doInBackground(String... params)에 대한 매개 변수로 사용하십시오.

두 번째 매개 변수 (귀하의 경우 Void)는 publishProgress(DATATYPE)/onProgressUpdate(DATATYPE... progress)을 통해 진행 상황을 "게시"하는 데 사용되는 데이터 유형을 나타냅니다. 이 방법은 변경 사항을 사용자에게 알려주는 데 적합합니다 (예 : 파일 다운로드가 끝났음에도 불구하고 몇 가지 조치 필요).

마지막 매개 변수 (Object)는 전달할 데이터 유형을 onPostExecute(DATATYPE) (이 예제에서는 Object)으로 지정합니다. 이것은 어딘가에서 ListAdapter를 업데이트하거나 doInBackground에서 수행 된 작업 결과에 따라 다른 UI 변경을 트리거하는 것일 수 있습니다.

+0

또한 편집 결과는 doinBackground에서 반환하는 값입니다. – Pragnani

관련 문제