Android 如何从对话框片段中获取主机片段中的按钮单击
我有一个listFragment,我想在listItemClick上显示一个DialogFragment(是/否)。我想返回listFragment中的用户选择(是/否)。我已经读过关于监听器接口机制的文章,但是它可以与activityfragment一起工作。一种方法是:Android 如何从对话框片段中获取主机片段中的按钮单击,android,android-fragments,android-alertdialog,Android,Android Fragments,Android Alertdialog,我有一个listFragment,我想在listItemClick上显示一个DialogFragment(是/否)。我想返回listFragment中的用户选择(是/否)。我已经读过关于监听器接口机制的文章,但是它可以与activityfragment一起工作。一种方法是: 在包含“是/否”按钮选择函数的对话框片段中定义接口,并在警报对话框中单击“正/负”按钮时调用这些方法 在主活动中实现此接口 在listFragment中启动dialogFragment单击 在“活动”中保存用户选择 通过在主
但是我们有什么简单的机制来完成这个简单的任务吗?任何示例或代码?您也可以使用事件总线来促进组件之间的通信。Otto是一个很好的库,可以在这里使用-->。它是由Square的家伙制作的,所以你知道它是一个高质量的开源项目
他们在存储库中有一个示例,向您展示了它的易用性 还有另一种方法可以从DialogFragment返回结果。您可以使用。创建DialogFragment的实例时,将目标片段设置为它。然后在DialogFragment中,您可以从中获取此片段。例如,您可以这样做:
public interface DialogClickListener {
public void onYesClick();
public void onNoClick();
}
非常感谢你!这正是我要找的!不适用于“import android.support.v4.app.ListFragment;”和dialog.setTargetFragment(此,0);My ListFragment Get me错误:片段中的setTargetFragment(android.app.Fragment,int)无法应用于(com.xyz.xyz.cursoradapterframent,int)@powder366有任何解决方案吗?谢谢J-rottt帮了我大忙!我发现到处都有对话片段交流的活动!您的回答帮助我创建了从子片段到对话片段的回调!哇,这本应该被更清楚地记录下来,我总是在活动中可怕地传递回调。从链接中可以看出:“这个项目不赞成和[RxAndroid]()。这些项目允许使用与Otto相同的事件驱动编程模型,但它们更具能力,并且提供更好的线程控制。”对于像我这样寻找这些东西的人:
public class MyListFragment extends ListFragment implements DialogClickListener {
...
private void showDialog() {
DialogFragment dialog = new MyDialogFragment();
dialog.setTargetFragment(this, 0);
dialog.show(getFragmentManager(), "dialog");
}
@Override
public void onYesClick() {
// do something
}
@Override
public void onNoClick() {
// do something
}
}
public class MyDialogFragment extends DialogFragment {
private DialogClickListener callback;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
callback = (DialogClickListener) getTargetFragment();
} catch (ClassCastException e) {
throw new ClassCastException("Calling fragment must implement DialogClickListener interface");
}
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage("message")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
callback.onYesClick();
}
}).setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
callback.onNoClick();
}
});
return builder.create();
}
}