2017-08-19 26 views
0

我寫我的第一個Android應用程序,我堅持了這個問題:Android應用程序崩潰後startActivity方法是從的onclick回調調用,清單似乎確定

我想切換從MainActivityAddExpense一個FloatingButton活動被點擊,所以我寫了這個代碼(內部protected void onCreate(Bundle savedInstanceState)

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(getApplicationContext(), AddExpense.class); 
      startActivity(intent); 
     } 
    }); 

AddExpense CLAS長相很容易像這樣

public class AddExpense extends AppCompatActivity { 

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

}

但是後,我在FAB單擊該應用程序總是崩潰。
翻翻其他的答案我發現,通常問題在於清單裏面,但我覺得這不是我的情況:

<?xml version="1.0" encoding="utf-8"?> 

<application> 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:roundIcon="@mipmap/ic_launcher_round" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme.NoActionBar"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

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

任何幫助將是非常讚賞。

- 編輯 - logcat的報告:

08-19 18:10:02.802 10393-10393/com.example.senso.budgetracker E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: com.example.senso.budgetracker, PID: 10393 
                      java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.senso.budgetracker/com.example.senso.budgetracker.AddExpense}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity. 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2728) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2814) 
                       at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1527) 
                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                       at android.os.Looper.loop(Looper.java:154) 
                       at android.app.ActivityThread.main(ActivityThread.java:6290) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
                      Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity. 
                       at android.support.v7.app.AppCompatDelegateImplV9.createSubDecor(AppCompatDelegateImplV9.java:356) 
                       at android.support.v7.app.AppCompatDelegateImplV9.ensureSubDecor(AppCompatDelegateImplV9.java:325) 
                       at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:286) 
                       at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139) 
                       at com.example.senso.budgetracker.AddExpense.onCreate(AddExpense.java:11) 
                       at android.app.Activity.performCreate(Activity.java:6760) 
                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134) 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2681) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2814)  
                       at android.app.ActivityThread.-wrap12(ActivityThread.java)  
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1527)  
                       at android.os.Handler.dispatchMessage(Handler.java:102)  
                       at android.os.Looper.loop(Looper.java:154)  
                       at android.app.ActivityThread.main(ActivityThread.java:6290)  
                       at java.lang.reflect.Method.invoke(Native Method)  
+1

顯示logcat錯誤信息 – umuieme

+0

查看[stack trace](http://stackoverflow.com/questions/23353173)來確定崩潰的原因。 –

+0

是activity_add_expense有效嗎? – cliff2310

回答

0

在你的XML嘗試添加一個主題標籤是這樣的:

<activity android:name=".AddExpense" 
    android:label="@string/app_name" 
    android:parentActivityName=".MainActivity" 
    android:theme="@style/AppTheme.NoActionBar"> 
    <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="blah.blah.com.Myproject.MainActivity" // your package replace 
     /> 

</activity> 
+0

不知道爲什麼,但它的工作!謝謝你,先生。 –

+0

真棒,你可以標記爲答案:)祝你好運。它不工作的原因是你沒有鏈接父母的活動。 –

+1

@ F.Peconi,您可以刪除''標籤。你只需要'android:theme' –

0

我想通了,這是一個語法問題!
不知何故,編輯清單,我在

<application> 
android:allowBackup="true" 
... 
android:theme="@style/AppTheme"> 

改變

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:roundIcon="@mipmap/ic_launcher_round" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 

立即關閉應用標籤和離開屬性沒有可解析。
這足以正確關閉標籤以使所有工作正常。

相關問題