Fragment があり、その Fragment から DialogFragment を表示します。DialogFragment から Fragment にメッセージを送信するか、Fragment の変数を取得します。どうすればできますか?
1840 次
2 に答える
3
このためにリスナーパターンを利用したいと思うかもしれません。始めるための簡単な例を次に示します。
public class MyDialogFragment extends DialogFragment {
public interface MyDialogFragmentListener {
public void abstract onDialogMessage(int someValueIWantToSendToFragment);
}
private MyDialogFragmentListener mListener;
....
public void setListener(MyDialogFragmentListener listener) {
mListener = listener;
}
}
次に、ダイアログからフラグメントにデータを送信する必要があるときはいつでも、mListener.onDialogMessage(someValue);を呼び出します。
ダイアログフラグメントを作成するときは、MyDialogFragmentListenerのインスタンスを使用してダイアログフラグメントでsetListenerを呼び出すようにしてください。
于 2012-04-14T20:17:16.987 に答える
0
このコードは、dialogFragment の好きな場所に配置できます。
Bundle args = new Bundle();
args.putString("message",myMessage);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
Fragment fragment = Fragment.instantiate(getActivity(), MyFragment.class.getName(), args);
ft.replace(R.id.details, fragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
たとえば、onCreate
of ダイアログ フラグメントでは、bundle を使用してメッセージを送信します。
public static class MyDialogFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
String myMessage="Hello Fragment";
Bundle args = new Bundle();
args.putString("message",myMessage);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
Fragment fragment = Fragment.instantiate(getActivity(), MyFragment.class.getName(), args);
ft.replace(R.id.details, fragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
return new AlertDialog.Builder(getActivity())
.setIcon(R.drawable.ic_dialog_about)
.setTitle(R.string.about)
.setMessage(R.string.about_message)
// ...
.create();
}
}
次の行だけを使用しMyFragment
て、メッセージを取得できます。
getArguments().getString("message");
于 2012-04-15T10:45:31.163 に答える