2012-12-06 3 views
0

기사 목록이있는 홈 화면이 포함 된 애플리케이션을 개발했습니다. 클릭하면 다른 화면에서 상세 정보에 액세스합니다.Jelly Bean의 Android 탐색 버튼 위로

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

하지만 젤리 빈에

, 사용되는 코드는 다음과 같습니다 :

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

는 사람이 줄에 좀 도와 줄래을 정말 잘 모든 것을 초기화하여 진정한 얻는 방법을 알아 내야?

답변

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. 

선호도는 활동이 속한 선호하는 작업을 나타냅니다. 기본적으로 동일한 응용 프로그램의 모든 활동에는 서로에 대한 선호도가 있습니다. 따라서 기본적으로 동일한 응용 프로그램의 모든 활동은 동일한 작업을 선호합니다. 그러나 활동에 대한 기본 연관 관계를 수정할 수 있습니다. 서로 다른 응용 프로그램에 정의 된 활동은 선호도를 공유 할 수 있으며, 동일한 응용 프로그램에 정의 된 활동에 다른 작업 친화력을 할당 할 수 있습니다.

+0

올바른 케이스에 올바른 의도를 만들 수 있도록 true 또는 false를 반환하는 특정 코드에 대한 정보가 필요합니다. 내 대답은 비어 있습니다. 물론 메소드가 부울을 반환해야하는 경우 부울을 반환해야합니다. – Seynorth

+0

내 대답을 다시 확인하십시오. 공식 문서에서 물건을 추가했습니다! – Pavlos

+0

나는 또한 나의 질문을 편집했다. 나는이 방법의 목적이 무엇인지를 안다. 나는 그것을 위로 네비게이션 패턴으로 사용한다고 설명했다. 내 유일한 문제는 내 의도 또는 매니페스트 또는 다른 파일을 "true"값을 얻기 위해 잘 초기화하는 방법입니다. – Seynorth

관련 문제