2013-09-04 17 views
10

Bene quando im lavorando su qualcosa e ho bisogno di configurare la barra delle azioni nella mia app ho iniziato dal http://developer.android.com e ho trovato quello che sto cercandoCome navigare ad un'attività genitore

public boolean onOptionsItemSelected(MenuItem item) { 
switch (item.getItemId()) { 
// Respond to the action bar's Up/Home button 
case android.R.id.home: 
    NavUtils.navigateUpFromSameTask(this); 
    return true; 
} 
return super.onOptionsItemSelected(item);} 

naturalmente dopo l'aggiunta del

<activity 
    android:name="com.example.myfirstapp.DisplayMessageActivity" 
    android:label="@string/title_activity_display_message" 
    android:parentActivityName="com.example.myfirstapp.MainActivity" > 
    <!-- Parent activity meta-data to support 4.0 and lower --> 
    <meta-data 
     android:name="android.support.PARENT_ACTIVITY" 
     android:value="com.example.myfirstapp.MainActivity" /> 
</activity> 

e

@Override 
public void onCreate(Bundle savedInstanceState) { 
    ... 
    getActionBar().setDisplayHomeAsUpEnabled(true); 
} 

ho fatto tutto questo , ma quando il mio programma ho Premere il pulsante nella barra delle azioni del programma si blocca e qui è il logcat

09-04 12:54:02.087: E/AndroidRuntime(11033): FATAL EXCEPTION: main 
09-04 12:54:02.087: E/AndroidRuntime(11033): java.lang.IllegalArgumentException: Activity LegendActivity does not have a parent activity name specified. (Did you forget to add the android.support.PARENT_ACTIVITY <meta-data> element in your manifest?) 
09-04 12:54:02.087: E/AndroidRuntime(11033): at android.support.v4.app.NavUtils.navigateUpFromSameTask(NavUtils.java:177) 
09-04 12:54:02.087: E/AndroidRuntime(11033): at com.yay.android.projects.stories.LegendActivity.onOptionsItemSelected(LegendActivity.java:44) 
09-04 12:54:02.087: E/AndroidRuntime(11033): at android.app.Activity.onMenuItemSelected(Activity.java:2611) 
09-04 12:54:02.087: E/AndroidRuntime(11033): at com.android.internal.widget.ActionBarView$3.onClick(ActionBarView.java:206) 
09-04 12:54:02.087: E/AndroidRuntime(11033): at android.view.View.performClick(View.java:4261) 
09-04 12:54:02.087: E/AndroidRuntime(11033): at android.view.View$PerformClick.run(View.java:17356) 
09-04 12:54:02.087: E/AndroidRuntime(11033): at android.os.Handler.handleCallback(Handler.java:615) 
09-04 12:54:02.087: E/AndroidRuntime(11033): at android.os.Handler.dispatchMessage(Handler.java:92) 
09-04 12:54:02.087: E/AndroidRuntime(11033): at android.os.Looper.loop(Looper.java:137) 
09-04 12:54:02.087: E/AndroidRuntime(11033): at android.app.ActivityThread.main(ActivityThread.java:4921) 
09-04 12:54:02.087: E/AndroidRuntime(11033): at java.lang.reflect.Method.invokeNative(Native Method) 
09-04 12:54:02.087: E/AndroidRuntime(11033): at java.lang.reflect.Method.invoke(Method.java:511) 
09-04 12:54:02.087: E/AndroidRuntime(11033): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1038) 
09-04 12:54:02.087: E/AndroidRuntime(11033): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
09-04 12:54:02.087: E/AndroidRuntime(11033): at dalvik.system.NativeStart.main(Native Method) 

tutto è proprio come hanno detto naturalmente ho cambiato il nomi di attività corrispondenti ai nomi ho qual è il problema qui?

risposta

15

È necessario impostare l'attività di genitore all'interno del Maniifest il file

<activity 
      android:name="com.example.MainActivity" 
      android:label="@string/title_activity_main" 
      android:parentActivityName="com.example.MainUIActivity" > 
      <meta-data 
       android:name="android.support.PARENT_ACTIVITY" 
       android:value="com.example.SampleActivity" /> 
     </activity> 

o utilizzare il Support-V4 come segue

NavUtils.navigateUpTo(sourceActivity, upIntent); 

Oppure provare la soluzione di cui al this post

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case android.R.id.home: 
     Intent upIntent = new Intent(this, YourListActivity.class); 
     if (NavUtils.shouldUpRecreateTask(this, upIntent)) { 
      // This activity is not part of the application's task, so 
      // create a new task 
      // with a synthesized back stack. 
      TaskStackBuilder 
        .from(this) 
        .addNextIntent(new Intent(this, HomeActivity.class)) 
        .addNextIntent(upIntent).startActivities(); 
      finish(); 
     } else { 
      // This activity is part of the application's task, so simply 
      // navigate up to the hierarchical parent activity. 
      NavUtils.navigateUpTo(this, upIntent); 
     } 
     return true; 
    } 
} 

Questo è il modo migliore per farlo con Android inferiore al livello API 11

+1

il manifest l'ho fatto ma il problema era con il navigateUpTo non ho usato l'intento ora funziona ma c'è altro modo se non creare un intento ?? –

+0

puoi provare una delle soluzioni menzionate qui http://developer.android.com/training/implementing-navigation/ancestral.html –

+0

cosa succede se non uso "shouldUpRecreateTask"? inizierà comunque la prima attività, giusto? –

Problemi correlati