如何获取点击按钮,从对话框片段主机片段(How to get button clicks in ho

2019-06-18 20:13发布

I have a listFragment, where I want to display a DialogFragment (Yes/No) on listItemClick. I want to get back the user selection(Yes/No) in listFragment. I have read about the listener interface mechanism but that work with activity<->fragment. One way of doing this can be:

  1. Define interface in dialog fragment containing yes/no button selection functions, and call these methods on alert dialog positive/negative button clicks.
  2. Implement this interface in Main activity.
  3. Initiate dialogFragment in listFragment onItem click.
  4. Save user selection in activity.
  5. get this choice in listFragment by another interface, implemented in Main activity.

But do we have any simple mechanism for this simple task? any example or code?

Answer 1:

还有另一种方式如何得到的结果从DialogFragment回来。

您可以使用Fragment.setTargetFragment() 。 在创建DialogFragment的实例设定目标片段吧。 然后在DialogFragment你可以从这个片段Fragment.getTargetFragment() 。

例如,你可以做到这样:

public interface DialogClickListener {
    public void onYesClick();
    public void onNoClick();
}
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();
    }
}


Answer 2:

您还可以使用事件总线,以促进组件之间的通信。 奥托是使用可以在这里找到一个伟大的图书馆- > https://github.com/square/otto 。 它是由方形的家伙,让你知道它的质量开源项目做出。

他们有将告诉您它是多么容易使用的存储库的样本。



文章来源: How to get button clicks in host fragment from dialog fragment