Jelly Bean上的Android导航按钮

时间:2012-12-06 11:26:52

标签: android actionbarsherlock android-4.2-jelly-bean

我开发了一个包含带有文章列表的主屏幕的应用程序。 如果单击它,则可以在另一个屏幕中访问详细信息。

我实现了ActionBarSherlock,因此我使用了“up”按钮模式进行此活动。

然后我在这个应用程序中添加了一个小部件。单击窗口小部件时,可以直接访问详细信息活动。

“推送”按钮已按照Google推荐(http://developer.android.com/training/implementing-navigation/ancestral.html)实施。

我的问题是在API等级15及以下版本,它完美无缺。它调用以下代码:

@Override
public boolean shouldUpRecreateTask(Activity activity, Intent targetIntent) {
    String action = activity.getIntent().getAction();
    return action != null && !action.equals(Intent.ACTION_MAIN);
}

但是在JellyBean上,使用的代码是:

public boolean shouldUpRecreateTask(Intent targetIntent) {
    try {
        PackageManager pm = getPackageManager();
        ComponentName cn = targetIntent.getComponent();
        if (cn == null) {
            cn = targetIntent.resolveActivity(pm);
        }
        ActivityInfo info = pm.getActivityInfo(cn, 0);
        if (info.taskAffinity == null) {
            return false;
        }
        return !ActivityManagerNative.getDefault().targetTaskAffinityMatchesActivity(mToken, info.taskAffinity);
    } catch (RemoteException e) {
        return false;
    } catch (NameNotFoundException e) {
        return false;
    }
}

如果必须重新创建堆栈,该方法的第一部分将检索有关应加载的活动的信息。

但我仍然不明白该行是什么:

!ActivityManagerNative.getDefault().targetTaskAffinityMatchesActivity(mToken, info.taskAffinity);

任何人都可以在这方面帮助我,我真的需要找到如何通过初始化一切来获得真实吗?

1 个答案:

答案 0 :(得分:0)

它必须返回一些布尔方法。如果它需要为它的工作返回一个真正的布尔变量,你必须这样做!

来自官方文档:

Returns true if the app should recreate the task when navigating 'up' 
from this activity by using targetIntent.

If this method returns false the app can trivially call navigateUpTo(Intent)
using the same parameters to correctly perform up navigation. 
If this method returns false, the app should synthesize a new task stack by using 
TaskStackBuilder or another similar mechanism to perform up navigation.
  

亲和力表示活动更喜欢属于哪个任务。默认情况下,同一应用程序中的所有活动都具有彼此的关联。因此,默认情况下,同一应用程序中的所有活动都希望处于同一任务中。但是,您可以修改活动的默认关联。在不同应用程序中定义的活动可以共享关联,或者可以为同一应用程序中定义的活动分配不同的任务关联。