본문 바로가기
개발/android

DialogFragment에 DismissListener를 쉽게 사용하는 방법

by 매몰 2015. 9. 21.

 

 

 

DialogFragment를 종료한 후 결과를 받아서 처리해야 할때가 있다.

 

당연히 이때는 DismissListener를 사용하면 된다.

하지만 그냥 사용하는것보다 약간의 튜닝을 하면 더 편하다.

 

public abstract class DialogDismissListener implements DialogInterface.OnDismissListener {

private HashMap<String, String> mStrMap;
private HashMap<String, Integer> mIntMap;
private HashMap<String, Boolean> mBoolMap;

public void setValue(String key, String value) {
if(mStrMap == null)
mStrMap = new HashMap<String, String>();

mStrMap.put(key, value);
}

public void setValue(String key, int value) {
if(mIntMap == null)
mIntMap = new HashMap<String, Integer>();

mIntMap.put(key, value);
}

public void setValue(String key, boolean value) {
if(mBoolMap == null)
mBoolMap = new HashMap<String, Boolean>();

mBoolMap.put(key, value);
}

public String getValueForStr(String key) {
if(mStrMap == null)
return null;
else
return mStrMap.get(key);
}

public int getValueForInt(String key, int defaultvalue) {
if(mIntMap == null)
return defaultvalue;
else {
if(mIntMap.get(key) == null)
return defaultvalue;
else
return mIntMap.get(key);
}
}

public boolean getValueForBool(String key, boolean defaultvalue) {
if(mBoolMap == null)
return false;
else {
if(mBoolMap.get(key) == null)
return defaultvalue;
else
return mBoolMap.get(key);
}
}
}

 

이렇게 DismissListener를 확장해서 추상클래스를 만든다

전달 객체는 입맛따라 추가하면 된다

여기서는 기본적인 String, int, boolean 만 넣었다

 

 

 

public class CustomDialogFragment extends DialogFragment {

public static final String KEY_RESULT = "Result";

private DialogDismissListener mResultListener;

 

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View bgview = inflater.inflate(R.layout.userlist, container, false);

bgview.findViewById(R.id.Button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

//결과값 전달

if (mResultListener != null)
mResultListener.setValue(KEY_RESULTtrue);

dismiss();
}
});

 return bgview;
}

@Override
public void onActivityCreated(Bundle arg0) {
super.onActivityCreated(arg0);

    //받은 리스너를 등록한다
getDialog().setOnDismissListener(mResultListener);
}

@Override
public void onCancel(DialogInterface dialog) {
super.onCancel(dialog);
    //반드시 여기서도 종료를 해주어야 한다. DismissListener를 등록할 경우 back키를 누르면 종료되지 않고 cancel만 되기 때문이다
dismiss();
}

 

//리스너를 받는다

public void setDismissListener(DialogDismissListener listener) {

    mResultListener = listener;
    }

 

}

 

위와 같이 DialogFragment를 적용한다

 

 

 

public boolean showDlg() {

CustomDialogFragment fragment = new CustomDialogFragment();
fragment.setDismissListener(new CustomDismissListener()); //리스너 넣기

fragment.show(getSupportFragmentManager(), "dialog");

}

public class CustomDismissListener extends DialogDismissListener {

@Override
public void onDismiss(DialogInterface dialog) {
if(getValueForBool(NameDialogFragment.KEY_RESULT, false)) {

//결과값 처리

 

}

 

}

 

};

 

DialogFragment를 호출할때 리스너 클래스를 만들고 객체를 생성해 집어 넣는다

 

 

 

 

 

사업자 정보 표시
주식회사 머리말 | 고영진 | 서울특별시 송파구 중대로 135 서관 10층 (가락동, 아이티벤처타워) | 사업자 등록번호 : 524-88-00727 | TEL : 010-9990-3674 | Mail : gyjmeba@hanmail.net | 통신판매신고번호 : 2017-서울강남-03941호 | 사이버몰의 이용약관 바로가기