記事リストのあるホーム画面を含むアプリケーションを開発しました。それをクリックすると、別の画面で詳細にアクセスできます。
ActionBarSherlock を実装したので、このアクティビティには「上」ボタン パターンを使用しました。
次に、このアプリケーションにウィジェットを追加しました。ウィジェットをクリックすると、詳細アクティビティに直接アクセスできます。
「上へ」ボタンは、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);
誰でもこの行で私を助けることができますか?すべてをうまく初期化して true を取得する方法を見つける必要がありますか?