https://github.com/kenodoggy/FragmentSamples/blob/master/DialogFragment/app/src/main/java/com/kenodoggy/dialogfragment/SampleDialogFragment.java
제 질문은 이 소스코드를 사용해서 진행한 프로젝트에 대한 것입니다.
public class MainActivity extends AppCompatActivity implements SampleDialogFragment.OnDialogDismissed {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button hello = (Button) findViewById(R.id.activity_main_btn_hello);
Button goodbye = (Button) findViewById(R.id.activity_main_btn_goodbye);
hello.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDialog(SampleDialogFragment.HELLO);
}
});
goodbye.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDialog(SampleDialogFragment.GOODBYE);
}
});
}
public void showDialog(String salutation) {
SampleDialogFragment.newInstance(salutation).show(getFragmentManager(), SampleDialogFragment.TAG);
}
@Override
public void onDialogDismissed(String whichSalutation) {
if (whichSalutation.equals(SampleDialogFragment.GOODBYE)) {
Toast.makeText(this, "Thank you!", Toast.LENGTH_SHORT).show();
}
}
}
public class SampleDialogFragment extends DialogFragment implements DialogInterface.OnClickListener {
public static final String TAG = "SampleDialogFragment";
public static final String HELLO = "hello";
public static final String GOODBYE = "goodbye";
private static final String WHICH_SALUTATION = "salutation";
private String mSalutation;
private OnDialogDismissed mDialogDismissedCallback;
public interface OnDialogDismissed {
void onDialogDismissed(String whichSalutation);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mDialogDismissedCallback = (OnDialogDismissed)activity;
} catch (ClassCastException cce) {
Log.e("Error", getClass().getSimpleName() + ", calling Activity must implement OnDialogDismissed");
}
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
View view = getActivity().getLayoutInflater().inflate(R.layout.fragment_sample_dialog, null);
// set values based on which salutation (hello, goodbye) passed when this fragment was instantiated
String titleText;
ImageView image = (ImageView) view.findViewById(R.id.fragment_sample_dialog_imageview);
if (mSalutation.equals(HELLO)) {
titleText = getResources().getString(R.string.fragment_sample_dialog_txt_hello);
image.setImageResource(R.drawable.scottish_fold_ds_400w);
} else {
titleText = getString(R.string.fragment_sample_dialog_txt_goodbye);
image.setImageResource(R.drawable.kitten_wave);
}
// create custom title TextView
TextView title = new TextView(getActivity());
title.setText(titleText);
title.setPadding(0, 40, 0, 0);
title.setGravity(Gravity.CENTER);
title.setTextColor(getResources().getColor(R.color.colorAccent));
title.setTextSize(30);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
return(builder
.setView(view)
.setCustomTitle(title)
.setPositiveButton(R.string.close, this)
.create());
}
public static SampleDialogFragment newInstance(String salutation) {
SampleDialogFragment fragment = new SampleDialogFragment();
Bundle args = new Bundle();
args.putString(WHICH_SALUTATION, salutation);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mSalutation = getArguments().getString(WHICH_SALUTATION);
}
}
@Override
public void onClick(DialogInterface dialog, int which) {
// display a toast message on the screen when the dialog is dismissed for GOODBYE dialog only
if (mSalutation.equals(GOODBYE)) {
mDialogDismissedCallback.onDialogDismissed(GOODBYE);
}
}
}
이 코드는.. MainActivity 에서 버튼을 눌러
SampleDialogFragment 를 화면에 띄우고,
종료시에 값을 되돌려 주는 아주 훌륭한 DialogFragment 인듯합니다.
그런데.. 이걸로 예제처럼 Activity->Dialog Fragment 일 땐 잘 사용을 했지만,
Fragment -> DialogFragment 일 땐 값을 되돌리는 것을 못하겠어요..
우선 DialogFragment -> MainActivity -> Fragment 의 2단계로 가야하는건 알것같습니다.
그런데 DialogFragment -> MainAcitivty 까지는 알겠는데, 그리고 값을 받아오기는 하는데,
MainActivity-> Fragment로 바로 넘겨지는게 어렵네요..
답변 기다릴게요...