2013-09-04 8 views
10

dobrze, gdy im pracy na coś i trzeba skonfigurować pasek akcji w mojej aplikacji Zacząłem od http://developer.android.com i znalazłem to, czego szukamJak nawigować do działalności macierzystej

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);} 

Ofcourse po dodaniu

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

i

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

zrobiłem wszystko ale kiedy na mój program i nacisnąć w górę przycisk na pasku akcji program wywala i tutaj jest 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) 

wszystko jest tak jak mówili oczywiście Zmieniłem nazwy działań odpowiadające imionom mają jaki jest tutaj problem?

Odpowiedz

15

Musisz ustawić aktywność dominującą wewnątrz Maniifest plik

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

lub skorzystać z pomocy technicznej-V4 następująco

NavUtils.navigateUpTo(sourceActivity, upIntent); 

lub próby rozwiązania wymienionego w 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; 
    } 
} 

Jest to najlepszy sposób, aby zrobić to z Androidem niższym niż poziom API 11

+1

Manifest zrobiłem to ale problem był z navigateUpTo Nie użyłem intencji teraz działa , ale czy istnieje inny sposób, ale tworzenie intencji? –

+0

możesz wypróbować jedno z wymienionych tutaj rozwiązań http://developer.android.com/training/implementing-navigation/ancestral.html –

+0

co się stanie, jeśli nie użyję "shouldUpRecreateTask"? to nadal rozpocznie pierwszą czynność, prawda? –

Powiązane problemy