【问题标题】:How to navigate to a parent activity如何导航到父活动
【发布时间】:2013-09-04 09:55:31
【问题描述】:

好吧,当我在做某事时,我需要在我的应用程序中配置操作栏 我从http://developer.android.com开始 我找到了我要找的东西

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

当然是添加后

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

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

我做了所有这些 但是当我在我的程序上按下操作栏中的向上按钮时,程序崩溃了 这是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)

一切都如他们所说 当然,我已经更改了与我拥有的名称相对应的活动名称 这里有什么问题?

【问题讨论】:

    标签: android eclipse android-activity


    【解决方案1】:

    您必须在清单文件中设置父活动

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

    或者如下使用Support-V4

    NavUtils.navigateUpTo(sourceActivity, upIntent);
    

    或者试试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;
        }
    }
    

    这是使用低于 API 级别 11 的 android 的最佳方法

    【讨论】:

    • 我做了清单,但问题在于我没有使用意图的 navigateUpTo 现在它可以工作但除了创建意图还有其他方法吗??
    • 您可以尝试这里提到的解决方案之一developer.android.com/training/implementing-navigation/…
    • 如果我不使用“shouldUpRecreateTask”会发生什么?它仍然会开始第一个活动,对吧?
    • 亲爱的@Zac,您可以在 Your app->src/main/ 下找到 ManifestFile :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 2017-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多