IT TIP

Android : dialogfragment가 표시되는지 확인하는 방법

itqueen 2020. 12. 26. 16:22
반응형

Android : dialogfragment가 표시되는지 확인하는 방법


사용하여 대화 조각을 시작합니다.

FragmentTransaction ft = 
getFragmentManager().beginTransaction();
MyDialogFragment dialog = new MyDialogFragment()
dialog.show(ft, "dialog");

그런 다음 핸들을 얻으려면

Fragment prev = getFragmentManager().findFragmentByTag("dialog");

하지만 일단을 prev받으면 표시되는지 어떻게 확인합니까?

뒷이야기

내 문제는 내 루핑 코드가 대화 상자를 계속해서 시작한다는 것입니다. 그러나 대화 상자가 이미 표시되어있는 경우 다시 시작하고 싶지 않습니다. 이 뒷이야기는 단지 맥락을위한 것입니다. 내가 찾는 답은 "반복 밖으로 이동"이 아닙니다.


단순히 null인지 확인하십시오.

if(prev == null)
    //There is no active fragment with tag "dialog"
else
    //There is an active fragment with tag "dialog" and "prev" variable holds a reference to it.

또는 프래그먼트 prev가 현재 연결되어 있는 활동을 확인할 수 있지만 null이 아닌지 확인한 확인해야합니다. 그렇지 않으면 NullPointerException이 발생합니다. 이렇게 :

if(prev == null)
    //There is no active fragment with tag "dialog"
else
    if(prev.getActivity() != this) //additional check
        //There is a fragment with tag "dialog", but it is not active (shown) which means it was found on device's back stack.
    else
        //There is an active fragment with tag "dialog"

 if (dialogFragment != null
     && dialogFragment.getDialog() != null
     && dialogFragment.getDialog().isShowing()
     && !dialogFragment.isRemoving()) {
            //dialog is showing so do something 
 } else {
     //dialog is not showing
 }

나는 이것을 내 사용자 정의 대화 조각 안에 추가했기 때문에 외부의 논리에 대해 걱정할 필요가 없습니다. 필드로 show()onDismiss()메서드를 재정의합니다 boolean shown.

  private static boolean shown = false;

    @Override
    public void show(FragmentManager manager, String tag) {
        if (shown) return;

        super.show(manager, tag);
        shown = true;
    }

    @Override
    public void onDismiss(DialogInterface dialog) {
        shown = false;
        super.onDismiss(dialog);
    }

표시 여부를 확인하려면 shown부울에 대한 getter를 만들 수 있습니다 .

참조 URL : https://stackoverflow.com/questions/21352571/android-how-do-i-check-if-dialogfragment-is-showing

반응형