2012-05-13 14 views
1

誰でも私を導くことができます。私は、スプラッシュとメインメニューのアクティビティを持つシンプルなアプリケーションを作成しようとしていますか?Android Manifestでメインメニューを表示

私は両方のアクティビティを実装しています。エミュレータを実行するたびにスプラッシュポップアップが表示されますが、メインメニューのアクティビティは表示されません。私は以下のようにマニフェスト内のXMLファイルを変更しようとしました

:メインメニューが表示されなかった理由

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.book" android:versionCode="1" 
    android:versionName="1.0"> 

    <uses-sdk android:minSdkVersion="7" /> 
    <application android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" android:name=".activity.StartApp"> 
<activity 
     android:name=".activity.MainMenuApp" 
     android:label="@string/app_name"> 

    </activity> 

     <activity android:name=".activity.SplashApp" 
      android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 

は、誰もがお勧めすることはできますか?

ありがとうございました。

編集:私は今、スプラッシュをロードすることができる午前

package="com.book" 

:SplashApp.java

import com.book.R; 
public class SplashApp extends Activity { 

private DBAdapter mDBAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.splash); 
} 

@Override 
protected void onStart() { 

    super.onStart(); 
    mDBAdapter = new DBAdapter(getApplicationContext()); 

    try{ 

... 
….  int sec = 1; 
     new Handler().postDelayed(new Runnable(){ 
      public void run(){ 
       Intent intent = new Intent(SplashApp.this, MainMenuApp.class); 
       startActivity(intent); 

       finish(); 
      } 
     }, sec * 1000); 
    }catch (Exception e){ 
     e.printStackTrace(); 
    } 
} 
} 

が、私は問題はそれが言う私のマニフェストファイルにあるかもしれないことがわかりましたメインメニューのページには移動しませんか?

+2

あなたにも 'SplashApp'活動のコードを共有していただけますか?あなたがそれを参照したときの「メインメニュー」もアクティビティである場合は、このマニフェストでも宣言する必要があります。 – rekaszeru

答えて

0

あなたメインメニューの活動が実際Activityであれば、それはまた、(インテントフィルタの有無にかかわらず)androidManifest.xmlファイルに注意する必要があります。あなたはSplashAppで初期化タスクを実行している場合は

... 
<activity android:name=".activity.MainMenu" 
    android:label="@string/main_menu"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity> 
... 

あなたのアプリケーションの主な機能はMainActivityにありますが、DEFAULTインテントフィルタは便利です。

EDIT1:マニフェスト

EDIT2でapplicationタグからandroid:name属性を削除しますがこのがハンドラを指すため使用SplashApp.this.finish()代わりに単にfinish()、。

SplashApp.java:

package com.book.activity; 

import java.io.BufferedReader; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.os.Handler; 
import com.book.R; 

public class SplashApp extends Activity 
{ 
    private DBAdapter mDBAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.splash); 
    } 

    @Override 
    protected void onStart() 
    { 
     super.onStart(); 
     mDBAdapter = new DBAdapter(getApplicationContext()); 
     try 
     { 
      ArrayList<BookBean> books = mDBAdapter.getAllBooks(); 
      if (books == null) 
      { 
       InputStream instream = getAssets().open("bookdata.txt"); 
       BufferedReader bf = new BufferedReader(new InputStreamReader(instream)); 
       String line; 
       while ((line = bf.readLine()) != null) 
       { 
        String arr[] = line.split("***"); 
        for (int i = 0; i < arr.length; i++) 
        { 
         String temp[] = arr[i].split("*"); 
         BookBean book = new BookBean(); 

         book.setDescription((temp[0])); 
         book.setName(temp[1]); 
         book.setYearPublished(temp[2]); 
         mDBAdapter.insertBook(book); 
        } 
       } 
      } 
      final int sec = 1; 
      new Handler().postDelayed(new Runnable() 
      { 
       public void run() 
       { 
        Intent intent = new Intent(SplashApp.this, MainMenuApp.class); 
        startActivity(intent); 
        SplashApp.this.finish(); 
       } 
      }, sec * 1000); 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

のAndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.book" android:versionCode="1" 
    android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="7" /> 
    <application android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name"> 
     <activity android:name=".activity.MainMenuApp" 
      android:label="@string/app_name" /> 
     <activity android:name=".activity.SplashApp" 
      android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
    </application> 
</manifest> 
+0

上記のようにマニフェストを変更しましたが、まだ強制終了のエラーがあります。 – Kitaro

+0

logcatの部分も便利です。上のコードは正しく動作しています(レイアウト/ライフサイクルの部分)ので、問題はデータベースからデータを取得する/リストを作成することにあります。例外のログ出力を貼り付けてください。ありがとう! – rekaszeru

+0

ログ出力の場所はわかりませんが、logcatには、たとえば _E/AndroidRuntime(579)などがあります。原因:java.lang.ClassNotFoundExceptino:loader dalvik.systemのcom.book.activity.activity.StartApp。PathClassLoader_ – Kitaro

関連する問題