如何获得按钮点击从对话片段主机片段 [英] How to get button clicks in host fragment from dialog fragment

查看:156
本文介绍了如何获得按钮点击从对话片段主机片段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个listFragment,在这里我想显示一个DialogFragment(是/否)上listItemClick。我想找回用户选择(是/否)在listFragment。我看了一下,侦听器接口机制,但与活性其中的工作; - >片段。这样做的一种方式可以是:

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. 定义界面对话框片段含是/否按钮选择功能,并呼吁警告对话框正/负键点击这些方法。
  2. 在实施中主要活性这个接口。
  3. 在listFragment onItem单击启动dialogFragment。
  4. 在活动
  5. 在保存用户的选择。
  6. 在另一个界面,主要业务实现得到这样的选择在listFragment。

但是,我们有什么简单的机制,这个简单的任务?任何例子或者code?

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

推荐答案

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

您可以使用<一个href="http://developer.android.com/reference/android/app/Fragment.html#setTargetFragment%28android.app.Fragment,%20int%29">Fragment.setTargetFragment().当您创建DialogFragment实例设定的目标片段吧。然后,在DialogFragment你可以得到这个片段<一个href="http://developer.android.com/reference/android/app/Fragment.html#getTargetFragment%28%29">Fragment.getTargetFragment().

For例如,你可以做到这样:

There is another way how to get the result back from DialogFragment.

You can use Fragment.setTargetFragment(). When creating an instance of your DialogFragment set target fragment to it. Then in DialogFragment you can get this fragment from Fragment.getTargetFragment().

For example, you can do it so:

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();
    }
}

这篇关于如何获得按钮点击从对话片段主机片段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆