블로그 이미지
매몰

모바일 어플리케이션 개발 1인 기업 고영진모바일입니다. 저와 함께 맛깔스러운 앱을 만들어 보아요~

Rss feed Tistory
개발/android 2015.09.21 15:01

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




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를 호출할때 리스너 클래스를 만들고 객체를 생성해 집어 넣는다





 

 



수제 앱 장인: 고영진


고영진모바일 1인기업 대표 겸 개발자 

  

     실패만 하고 있어도 꿈을 포기하지 않는 남자 

     제가 직접 경험하고 습득한 지식을 위주로 올릴게요

 




사업자 정보 표시
고영진모바일 | 고영진 | 서울특별시 관악구 낙성대동 서울대연구공원 SK상생혁신센터 | 사업자 등록번호 : 109-11-82076 | TEL : 010-9990-3674 | Mail : gyjmeba@hanmail.net | 통신판매신고번호 : 2010-서울강서-0217호 | 사이버몰의 이용약관 바로가기
TOTAL 69,579 TODAY 8