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_RESULT, true);
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를 호출할때 리스너 클래스를 만들고 객체를 생성해 집어 넣는다
도움이 되셨다면~ 정성으로 빚은 저희 앱! 많은 이용 바래요:)
https://meorimal.com/index.html?tab=spaceship
https://meorimal.com/subway.html
'개발 > android' 카테고리의 다른 글
Bitmap 이미지를 byte로 바로 보낸다고? 그것도 소켓으로? (2) | 2015.11.30 |
---|---|
이미지를 싹뚝 자를때 꼭 알아야 할 비밀 (0) | 2015.10.26 |
함수의 옵션을 블럭처럼 조합해서 사용해보자~ (0) | 2015.08.24 |
Fragment에서 startActivityForResult() 호출시 onActivityResult() requestCode 문제 (0) | 2015.06.22 |
버튼 누름 효과를 만드는 2가지 방법 (2) | 2015.04.19 |