2011-07-22 17 views
4

私は、バックグラウンドと進行状況バーを持つロードページを作成し、読み込みが終了するとメインクラスを起動しますが、読み込み画面は表示されません。ロード中は黒い画面になり、その後メイン画面になります。私はonResumeですべての作業を入れて、私はまた、起動前に黒い画面が表示されないようにするにはどうすればよいですか?

+0

無関係 - あなたはonResume()メソッドでsuper.onStart()を呼び出す必要がありますか? – Noah

+0

R.layout.loadpage上のxmlは何ですか? – PedroAGSantos

+0

@sqrfv私はそれを変更するのを忘れてしまった。同じ事が起きました – Robin

答えて

8

はあなたが完了した後に移入されwork.Yourレイアウトのこの種のAsyncTaskを使用する必要がありません運を事前に

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.loadpage); 
    //get rid of title bar 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setRequestedOrientation(1); 

} 

@Override 
public void onResume() { 
    super.onResume(); 

    words = WordList.sharedWordList(this); 

    if(generatedLevels==null) 
    { 
     generatedLevels = new ArrayList<PuzzleMZLen>(); 
    } 
    if(!p.isAlive()) 
    { 
     p.start();   
    } 


    Intent i = new Intent(getApplicationContext(), Main.class); 
    startActivity(i); 

} 

感謝をONSTART試してみましたあなたは黒い画面を見ています。

onPreExecuteAsyncTaskクラスを使用して進行状況バーを表示します。 doInBackgroundメソッドでローディングコードを記述します。

3

このためには、必ずAsyncTaskを使用してください。私は私のアプリのために行くのと同じことがあったが、ここに私のコードは次のとおりです。

private class getAllData extends AsyncTask<Context, Void, Cursor> { 
    protected void onPreExecute() { 
     dialog = ProgressDialog.show(Directory.this, "", 
       "Loading. Please wait...", true); 
    } 

    @Override 
    protected Cursor doInBackground(Context... params) { 
     DirectoryTransaction.doDepts(); 

     return null; 
    } 

    protected void onPostExecute(Cursor c) { 

     for(int i = 0 ; i < DeptResults.length ; i++){ 
      deptsAdapter.add(DeptResults[i][0]);    
     } 
     dialog.dismiss(); 
    } 
} 

onPreExecute方法はただ「ロード中...しばらくお待ちください」と表示ProgressDialogをロードします。 doInBackground私のアプリケーションをロードしていたもの(私の場合、サーバーからテキストを取得して解析する)を行い、onPostExecuteはスピンナーを満たしてからProgressDialogを終了します。あなたは進捗バーのためにいくつか異なるものを望むでしょうが、AsyncTaskは非常に似ています。 onCreateで新しいものを呼ぶgetAllData.execute(this);

+0

これのためのタンク。それは多くを助ける – Robin

+0

それが私がそれを必要とした方法を働かせるために私をしばらく時間がかかりましたが、それはすべて難しいことではありません。 progressdialogsのandroid devのドキュメントをチェックしてください。 – Rob

1

良いスプラッシュアクティビティを作成するには良い方法があります。

ANRを防止するには、他の回答に記載されているように、UIスレッドの外部にあるすべてのデータ読み込みを移動する必要があります。 AsyncTaskまたはそれ以外の種類のマルチスレッドを使用してください。しかし、あなたは、次の手順を実行する必要があり、いくつかの低速のデバイスにいくつかの瞬間のために示して迷惑な黒い画面を削除する

  1. bg_splash描画可能を作成します。ちょうどあなたの時間の活動のショーに黒の背景の代わりにユーザーに表示されます。たとえば、それはブランドの色の背景にブランドロゴすることができます。
  2. /res/values/themes.xmlにそれをスプラッシュ画面のテーマを作成して置く:

    <?xml version="1.0" encoding="utf-8"?> 
    <resources> 
        <style name="MyApp.Splash" parent="@style/Theme.Sherlock.Light.NoActionBar"> 
         <item name="android:windowBackground">@drawable/bg_splash</item> 
        </style> 
    </resources> 
    
  3. AndroidManifest.xmlを更新することにより、活動をスプラッシュするために作成されたテーマを割り当てることを忘れないでください:

    <?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
        package="com.example.myapp" 
        android:versionCode="1" 
        android:versionName="1" > 
    
        ... 
    
        <application> 
         <activity 
          android:name=".SplashActivity" 
          android:theme="@style/MyApp.Splash" > 
          <intent-filter> 
           <action android:name="android.intent.action.MAIN" /> 
           <category android:name="android.intent.category.LAUNCHER" /> 
          </intent-filter> 
         <activity> 
         ... 
        </application> 
    </manifest> 
    
関連する問題