相关疑难解决方法(0)

ActionBar向上导航重新创建父活动而不是onResume

我正在使用推荐的Up Navigation方法,我的代码如下所示:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            Intent h = new Intent(ShowDetailsActivity.this, MainActivity.class);
            h.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(h);
            return true;
        default: return super.onOptionsItemSelected(item);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是用例:

  1. 我启动了我的应用程序"MainActivity"
  2. 我点击一个按钮转到"ShowDetailsActivity"
  3. 我点击UP ActionBar导航

问题是在我点击UP之后,MainActivity再次点击其onCreate()方法并失去所有状态而不是从典型的onResume()开始,就像我刚刚从ShowDetailsActivity调用"finish()"一样.为什么?它是如何工作的,这是Android重新创建使用"向上"导航方法导航到的所有活动的预期行为?如果我点击后退按钮,我会得到预期的onResume生命周期.

如果Android"正确"的不存在,这是我的解决方案:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            Intent upIntent = new Intent(this, MainActivity.class);
            if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
                NavUtils.navigateUpTo(this, upIntent);
                finish();
            } else {
                finish();
            }
            return true;
        default: return super.onOptionsItemSelected(item);
    }
}
Run Code Online (Sandbox Code Playgroud)

android android-actionbar

69
推荐指数
3
解决办法
2万
查看次数

ActionBar'up'按钮销毁父活动,'back'不会

我有一个相对简单的Android应用程序,其中一个Activity显示项目列表,另一个显示所选项目的详细信息.我启动list活动,这是我最重要的活动(FLAG_ACTIVITY_CLEAR_TOP用于清除调用它的登录活动):

Intent intent = new Intent(this, ListInstancesActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
Run Code Online (Sandbox Code Playgroud)

并且从该活动中我对选择的项目采取行动:

Intent detailIntent = new Intent(this, ShowInstanceActivity.class);
detailIntent.putExtra(ShowInstanceFragment.ARG_ITEM_ID, id);
startActivity(detailIntent);
Run Code Online (Sandbox Code Playgroud)

一切正常,如果我使用软键"后退"按钮,那么ListInstancesActivity我会按照我的预期返回.但是,如果我按下操作栏上的后退/上移按钮,它会破坏并重新创建ListInstancesActivity.这很糟糕,因为这样做计算成本相对较高.

如何使操作栏的行为与软键相同,只返回上一个活动而不是销毁它.

应该注意的是,我正在使用动作栏的支持库版本.

我的相关部分AndroidManifest.xml

<activity
  android:name=".agenda.ListInstancesActivity"
  android:label="@string/list_instances_activity_title">
</activity>
<activity
  android:name=".agenda.ShowInstanceActivity"
  android:label="@string/show_instance_activity_title"
  android:parentActivityName=".agenda.ListInstancesActivity">
</activity>
Run Code Online (Sandbox Code Playgroud)

android android-actionbar android-actionbar-compat

49
推荐指数
2
解决办法
1万
查看次数

NavUtils.navigateUpTo()不会启动任何Activity

我有两个活动

  • MainActivity
  • DeepLinkActivity

我设置了所有内容,NavUtils以便像在这里,这里这里建议一样进行导航.

我想要实现的是:

  1. DeepLinkActivity深层链接开始
  2. 按下来
  3. MainActivity

只要我的应用程序在最近的应用程序中有任何任务,一切都很好.

但是,当我从最近的应用程序中删除我的应用程序时,它的行为如下:

  1. 从最近的应用中移除我的应用
  2. DeepLinkActivity深层链接开始
  3. 按下来
  4. 我的应用程序关闭,就像按下时一样

我调试了代码,然后发现,NavUtils.shouldUpRecreateTask()返回false. upIntent将所有内容设置为正常,就像我的Component设置一样.但是,NavUtils.navigateUpTo()行为就像打电话一样finish().没有日志声明,没有.

任何想法,如何解决?

AndroidManifest.xml中

<activity
    android:name=".DeepLinkActivity"
    android:parentActivityName="my.package.MainActivity">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="my.package.MainActivity"/>
    <intent-filter>
        <!-- Some intent filter -->
    </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

DeepLinkActivity.java

@Override
public boolean onOptionsItemSelected(final MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            Intent upIntent = NavUtils.getParentActivityIntent(this);
            if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
                // create new …
Run Code Online (Sandbox Code Playgroud)

android android-lifecycle android-activity

45
推荐指数
3
解决办法
1万
查看次数

在JellyBean上打破导航?

源代码可在此处获取:https://github.com/novemberox/NavigationTest此示例的修改版本:http://developer.android.com/training/implementing-navigation/ancestral.html

我有三个活动:

  • Main Activity 只是申请的主要入口
  • Category Activity 它是详细活动的父级
  • Detail Activity

Main Activity有打开的按钮Category ActivityDetail Activity. Category Activty只有一个按钮打开Detail Activity.最后Detail Activity,它显示了一些文本,并具有模拟点击ActionBar的向上按钮.

我的"点击"路径是:

  • 打开主要活动
  • 打开详细活动
  • 点击"向上按钮"
  • 应显示类别Activty
  • 单击后退我们将主要活动恢复状态

这是预期的流程,并且在Jelly Bean(在Galaxy Nexus 4.1.1和模拟器4.2 Google exppack上测试)之前,它在每个Android上运行良好.它甚至可以在ICS上运行.我正在使用支持库和类似NavUtils和TaskStackBuilder的类,就像我在开始时指出的示例一样.

在JB上单击"向上按钮"时,它返回到主活动状态,状态恢复正常.我查看了支持库的源代码,我看到该NavUtils.navigateUpTo方法调用本机JB代码Activity#navigateUpTo.我尝试了两个NavUtils#navigateUpTo()并且NavUtils.navigateUpFromSameTask()具有相同的不满意结果.

你有什么建议要做这个好流程吗?

android android-support-library

31
推荐指数
1
解决办法
4847
查看次数

如何使用v7工具栏上的工具栏主页按钮提供向上导航

我的activity(import android.support.v7.widget.Toolbar;)中有一个工具栏,我正在尝试使用其主页按钮提供向上导航.是)我有的:

表现:

<!-- ... -->
<activity android:name=".SettingsActivity"
          android:label="@string/settings"
          android:parentActivityName=".MainActivity"/>
<!-- ... -->
Run Code Online (Sandbox Code Playgroud)

view_toolbar.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fitsSystemWindows="true"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:elevation="4dp">
</android.support.v7.widget.Toolbar>
Run Code Online (Sandbox Code Playgroud)

activity_settings.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- Toolbar -->
    <include
        layout="@layout/view_toolbar" />

    <!-- ... -->
Run Code Online (Sandbox Code Playgroud)

我的onCreate方法:

super.onCreate(bundle)
setContentView(R.layout.activity_settings);

// Set the toolbar
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

setSupportActionBar(toolbar);
Run Code Online (Sandbox Code Playgroud)

到目前为止,我不应该有一个按钮,我没有.所以我们没事.但是当我试图添加它时,我做不到.

首先我尝试了这个:

getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)

没工作.然后,我想这(如图所示这里):

toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
    Toast.makeText(ToolbarActivity.this, "Up clicked", …
Run Code Online (Sandbox Code Playgroud)

android android-toolbar

16
推荐指数
3
解决办法
2万
查看次数

返回显示清单中父活动错误的父活动

这是与主题相关的清单代码:

   <activity
        android:name="smartHomes.capstone.GeneralAndSecurity"
        android:label="@string/title_activity_general_and_security"
        android:parentActivityName="smartHomes.capstone.HomePage" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="smartHomes.capstone.HomePage" />
    </activity>
Run Code Online (Sandbox Code Playgroud)

这是错误日志:

   03-20 21:19:18.227: E/AndroidRuntime(787): FATAL EXCEPTION: main
   03-20 21:19:18.227: E/AndroidRuntime(787): java.lang.IllegalArgumentException: Activity           GeneralAndSecurity does not have a parent activity name specified. (Did you forget to add the  android.support.PARENT_ACTIVITY <meta-data>  element in your manifest?)
   03-20 21:19:18.227: E/AndroidRuntime(787):   at android.support.v4.app.NavUtils.navigateUpFromSameTask(NavUtils.java:177)
   03-20 21:19:18.227: E/AndroidRuntime(787):   at smartHomes.capstone.GeneralAndSecurity.onOptionsItemSelected(GeneralAndSecurity.java:41)
   03-20 21:19:18.227: E/AndroidRuntime(787):   at com.actionbarsherlock.app.SherlockActivity.onMenuItemSelected(SherlockActivity.java:208)
Run Code Online (Sandbox Code Playgroud)

我能否知道为什么返回按钮会给我一个错误?

android

6
推荐指数
1
解决办法
4503
查看次数

按活动操作栏后退按钮时如何转到上一个选定的选项卡

我在MainActivity中有六个选项卡,第二个选项卡有一个listview,当用户按下listview项时,它打开一个新的Activity with Action栏,所以,当用户按下第二个活动的后退按钮时,我想去主活动的上一个选项卡(第二个选项卡),但它加载了第一个选项卡(主页选项卡).

我怎么解决这个问题?

android android-fragments android-actionbar

6
推荐指数
2
解决办法
4614
查看次数

android - 子活动完成时刷新父活动

我有一个父Activity,它启动了一个子活动.

在儿童活动中,我做:

toolbar = (Toolbar) findViewById(R.id.app_bar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle("Ride");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)

当我单击Home/Up按钮时,我finish是活动.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case android.R.id.home:
        finish();
        return true;
    default:
        return super.onOptionsItemSelected(item);
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,我finish还在Child Activity中的另一个地方,在我所拥有的两个地方finish,它都会回到Parent Activity.

我的问题:

我的问题是,我想刷新父活动只有在的情况下一个finishes.

当我没有从Up按钮完成结束时- Parent Activity中的数据发生了变化,所以 - 当我按Back/Up按钮时,不需要刷新Parent,但当我执行另一个时finish,我想刷新的家长.

我怎么能检测出来?

android parent-child android-activity up-navigation

2
推荐指数
1
解决办法
7279
查看次数