Question Comment naviguer vers une activité parent


Eh bien, lorsque je travaille sur quelque chose et je dois configurer la barre d'action dans mon application j'ai commencé à partir du http://developer.android.com et j'ai trouvé ce que je cherche

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

bien sûr après l'ajout de la

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

et le

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

j'ai fait tout ça mais quand sur mon programme j'appuie sur le bouton haut dans la barre d'action le programme plante et voici le 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)

tout est comme ils ont dit bien sûr j'ai changé les noms d'activité correspondant aux noms que j'ai quel est le problème ici?


10
2017-09-04 09:55


origine


Réponses:


Vous devez définir l'activité parent dans le fichier Maniifest

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

Ou utilisez le Support-V4 comme suit

NavUtils.navigateUpTo(sourceActivity, upIntent);

Ou essayez la solution mentionnée dans ce 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;
    }
}

C'est le meilleur moyen de le faire avec Android moins que le niveau 11 de l'API


16
2017-09-04 09:58