2013-05-22 5 views
0

여러 액티비티가있는 앱이 있는데, 각각 여러 개의 프래그먼트를 사용할 수 있습니다.프래그먼트에서 뒤로 버튼을 누를 때 활동을 남겨주세요.

하나의 활동 (IBAsTabsActivity라고 함)은 SherlockFragmentActivity를 확장하며 어떤 탭을 선택했는지에 따라 다른 조각이로드되는 예제 코드를 사용하고 있습니다. 가능한 단편 중 하나는 "SearchableListFragment"입니다. 이것은 모두 정상적으로 작동합니다. 나는 IBAsTabsActivity에 나를 데려가는 하나와 AnAlternativeActivity에 나를 데려가는 또 다른 버튼이있는 "집"활동을 가지고 있습니다. 버튼을 눌러 IBAsTabsActivity로 이동하고 여러 탭을 봅니다. 그런 다음 뒤로 버튼을 누르면 "집"으로 바로 이동합니다.

이제 AnAlternativeActivity를 설치하여 실행하고 싶습니다. 탭이 없으므로 Sherlock 코드를 사용하지 않습니다. 대신에 나는이 있습니다

public class AnAlternativeActivity extends FragmentActivity implements OnClickListener 
{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.blank_fragment_holder); 

     FragmentManager fm = getSupportFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 
     SearchableListFragment fb = new SearchableListFragment(); 
     ft.replace(R.id.fragment_holding_layout, fb); 
     ft.addToBackStack("replacingFragmentA"); 
     ft.commit(); 
} 

이를 내가 AnAlternativeActivity 전화를 홈 화면에있는 버튼을 클릭하면 모든만큼의 잘 작동, 나는 제대로 SearchableListFragment() (fragment_holding_layout 내부에)보고 내용. 그러나 이제는 뒤로 버튼을 클릭하면 fragment_holding_layout 내의 조각이 사라지지만 AnAlternativeActivity는 계속 실행됩니다. AnAlternativeActivity를 종료하고 집으로 돌아가려면 뒤로 버튼을 다시 눌러야합니다.

이 문제를 해결하기 위해 추한 코드를 만들 수는 있지만이 시나리오에 대처할 수있는 표준 방법이 있다고 생각됩니다. 어떤 아이디어?

+0

fragment.getActivity 당신이 원하는 것을 해보고, 스스로 onBackPressed를 호출하십시오. –

+0

@Marko Lazić : 그것에 확장 할 수 있습니까? – Mick

+0

cod3-monk-3y에 유효한 포인트가 있습니다. –

답변

0

AnAlternativeActivity의 onPause에서 finish()을 호출하여 종료 할 수 있습니다.

public void onPause() { 
    super.onPause(); 
    finish(); 
} 
+0

그러나 전화가 울리면 그 활동에서 벗어날 것입니다. – Mick

2

부모 작업이라는 개념을 사용하면 쉽게 해결할 수 있습니다. 당신이해야 할 일은 AnAlternativeActivity의 부모 인 이며, 네비게이션이 처리된다는 것입니다. 당신의 AndroidManifest.xml 파일에서과 같이 AnAlternativeActivity에 대한 android:parentActivityName 속성을 추가 :

<activity 
    android:name="com.mick.AnAlternativeActivity" 
    android:label="@string/activity_title" 
    android:parentActivityName="com.mick.HomeActivity" > 
    <meta-data 
     android:name="android.support.PARENT_ACTIVITY" 
     android:value="com.example.mick.HomeActivity" /> 
</activity> 

당신은 새로운 장치 이상 장치에 대한 메타 데이터 태그의 일반 속성이 필요합니다. 자세한 내용은 http://developer.android.com/training/basics/firstapp/starting-activity.html ( 아래 표제 표제에 추가하십시오. 소제목).

+0

컴파일러가 android : parentActivityName에 대해 불만을 표시했지만 메타 데이터를 허용했습니다. 그런 다음 런타임에 전혀 차이가 없습니다. – Mick

+0

최신 API에서 실행하고 있습니까? 무시 당했을 수도 있습니다. 또한이 링크를 보면 올바른 탐색을위한 모든 코드가 표시됩니다. http://developer.android.com/training/implementing-navigation/ancestral.html – ashokgelal

0

ft.addToBackStack("replacingFragmentA");으로 전화하면 '뒤로'를 두 번 누를 필요가있는 것 같습니다. 백 스택에 트랜잭션을 추가하면 해당 결과 스택에 레이어를 추가하는 등의 효과가 있습니다.

그래서 'Back'을 누르면 트랜잭션이 '실행 취소'되어 말하고 SearchableListFragmentR.id.fragment_holding_layout으로 바뀝니다. 두 번째로 '뒤로'를 누르면 AnAlternativeActivity에서 '집'활동으로 돌아갑니다.

관련 문제