2017-08-19 4 views
0

Je suis en train d'écrire ma première application Android et je suis coincé avec ce problème:application se bloque Android après la méthode startActivity est appelée de rappel Onclick, manifeste semble ok

Je voudrais passer de MainActivity-AddExpense activité après une FloatingButton est cliqué j'ai donc écrit ce code (à l'intérieur 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 s regarde facilement comme ce

public class AddExpense extends AppCompatActivity { 

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

}

Toutefois, l'application se bloque après que je clique sur le fabuleux.
En regardant à travers d'autres réponses que je trouve que généralement le problème réside dans le manifeste, mais je pense que ce n'est pas mon cas:

<?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> 

Toute aide serait très apprécié .

--EDIT-- rapport 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

Afficher le message d'erreur logcat – umuieme

+0

Regardez la [trace de la pile] (http://stackoverflow.com/questions/23353173) pour déterminer la cause du plantage. –

+0

est activity_add_expense valide? – cliff2310

Répondre

0

dans votre xml, essayez d'ajouter une étiquette à thème comme celui-ci:

<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

Je ne sais pas pourquoi mais ça a marché! Merci monsieur. –

+0

génial pouvez-vous le marquer comme une réponse :) bonne chance. La raison pour laquelle cela ne fonctionnait pas est que vous n'avez pas lié l'activité parentale. –

+1

@ F.Peconi, vous pouvez supprimer la balise ''. Vous avez seulement besoin du 'android: theme' –

0

je me suis dit, c'était un problème de syntaxe!
D'une certaine façon, la modification du manifeste, je l'ai changé

<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"> 

dans

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

fermant immédiatement la balise d'application et en laissant les attributs non analysable.
Il suffisait de fermer correctement l'étiquette pour que tout fonctionne.