티스토리 뷰

반응형

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

반응형
댓글
공지사항
최근에 올라온 글