티스토리 뷰
Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.
Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.
아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.
Android Fragment handle back button press
Android Fragment 에서 뒤로 가기 버튼 처리하기
문제 내용
I have some fragments in my activity
제 액티비티에는 몇 개의 프래그먼트가 있습니다.
[1], [2], [3], [4], [5], [6]
And on Back Button Press I must to return from [2] to [1] if current active fragment is [2], or do nothing otherwise.
그리고 백 버튼을 누르면 현재 활성화된 프래그먼트가 [2]이면 [2]에서 [1]로 돌아가야 하고, 그렇지 않으면 아무 작업도 하지 않아야 합니다.
What is the best practise to do that?
이를 처리하기 위한 가장 좋은 방법은 무엇인가요?
EDIT: Application must not return to [2] from [3]...[6]
편집: 어플리케이션이 [3]...[6]에서 [2]로 돌아가면 안 됩니다.
높은 점수를 받은 Solution
When you are transitioning between Fragments, call addToBackStack()
as part of your FragmentTransaction
:
프래그먼트 간 전환 시 FragmentTransaction의 일부로 addToBackStack()을 호출합니다.
FragmentTransaction tx = fragmentManager.beginTransation();
tx.replace( R.id.fragment, new MyFragment() ).addToBackStack( "tag" ).commit();
If you require more detailed control (i.e. when some Fragments are visible, you want to suppress the back key) you can set an OnKeyListener
on the parent view of your fragment:
더 자세한 제어가 필요한 경우 (즉, 일부 프래그먼트가 표시될 때 백 키를 억제하려는 경우) 프래그먼트의 부모 뷰에 OnKeyListener를 설정할 수 있습니다.
//You need to add the following line for this solution to work; thanks skayred
fragment.getView().setFocusableInTouchMode(true);
fragment.getView().requestFocus();
fragment.getView().setOnKeyListener( new OnKeyListener()
{
@Override
public boolean onKey( View v, int keyCode, KeyEvent event )
{
if( keyCode == KeyEvent.KEYCODE_BACK )
{
return true;
}
return false;
}
} );
가장 최근 달린 Solution
We created tiny library for handling back press across multiple fragments and/or in Activity. Usage is as simple as adding dependency in your gradle file:
우리는 여러 프래그먼트와/또는 액티비티에서 back press를 처리하기 위한 작은 라이브러리를 만들었습니다. 사용법은 gradle 파일에 종속성을 추가하는 것만으로 간단합니다:
compile 'net.skoumal.fragmentback:fragment-back:0.1.0'
Let your fragment implement BackFragment
interface:
프래그먼트가 BackFragment 인터페이스를 구현하도록 하세요:
public abstract class MyFragment extends Fragment implements BackFragment {
public boolean onBackPressed() {
// -- your code --
// return true if you want to consume back-pressed event
return false;
}
public int getBackPriority() {
return NORMAL_BACK_PRIORITY;
}
}
Notify your fragments about back presses:
back press에 대해 프래그먼트에 알리세요:
public class MainActivity extends AppCompatActivity {
@Override
public void onBackPressed() {
// first ask your fragments to handle back-pressed event
if(!BackFragmentHelper.fireOnBackPressedEvent(this)) {
// lets do the default back action if fragments don't consume it
super.onBackPressed();
}
}
}
For more details and other use-cases visit GitHub page:
자세한 내용 및 다른 사용 사례는 GitHub 페이지를 방문하세요:
https://github.com/skoumalcz/fragment-back
출처 : https://stackoverflow.com/questions/7992216/android-fragment-handle-back-button-press
'개발 > 안드로이드' 카테고리의 다른 글
전화 걸기 앱에서 특정 전화번호가 표시되도록 하기 (0) | 2023.01.18 |
---|---|
ArrayList를 SharedPreferences에 저장하기 (0) | 2023.01.17 |
Android에서 URI Builder 사용 또는 변수가 있는 URL 생성 (0) | 2023.01.15 |
안드로이드에서 전체 히스토리 스택을 지우고 새로운 액티비티를 시작하는 방법 (0) | 2023.01.14 |
Android에서 WebView와 loadData (0) | 2023.01.14 |