从DialogFragment返回数据给Adapter

11

我正在尝试使用接口从 DialogFragment 返回数据到显示它的 ArrayAdapter 中。

我已经在这里看到了类似的内容,但是我不知道如何在DialogFragment中调用返回数据的函数。

谁能帮忙吗?

MyDialog.java

public class MyDialog extends DialogFragment {  

    static interface Listener {
        void returnData(int result);
    }

    /* ... */

    @Override
    public void onActivityCreated (Bundle savedInstanceState){
        super.onActivityCreated(savedInstanceState);        

        mBtnSubmit.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                // How can I call PCListAdapter.returnData ?

                dismiss();              
            }
        });
    }

}

PCListAdapter.java

public class PCListAdapter extends ArrayAdapter<PC> implements MyDialog.Listener {

    /* ... */

    public void showCommentDialog() {

        FragmentManager fm = ((Activity)mContext).getFragmentManager();
        MyDialog dialog = new MyDialog();
        dialog.show(fm, "mydialog");
    }

    @Override
    public void returnData(int result) {
    }
}
1个回答

17

你所阅读的链接讨论了如何使用侦听器使Fragment与Activity进行通信。这是因为Fragment与Activity之间紧密耦合。现在在你的情况下,由于你正在使用适配器来启动一个Fragment,所以你可以尝试这样做。

public class MyDialog extends DialogFragment {  

private Listener mListener;

public void setListener(Listener listener) {
  mListener = listener;  
}

static interface Listener {
    void returnData(int result);
}

/* ... */

@Override
public void onActivityCreated (Bundle savedInstanceState){
    super.onActivityCreated(savedInstanceState);        

    mBtnSubmit.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

            if (mListener != null) {
                 mListener.returnData(data);
            }

            dismiss();              
        }
    });
}
}

并且对于适配器(Adapter)

public class PCListAdapter extends ArrayAdapter<PC> implements MyDialog.Listener {

/* ... */

public void showCommentDialog() {

    FragmentManager fm = ((Activity)mContext).getFragmentManager();
    MyDialog dialog = new MyDialog();
    dialog.setListener(PCListAdapter.this);
    dialog.show(fm, "mydialog");
}

@Override
public void returnData(int result) {
}
}

这个不行,dialog.setListener(this) 这一行是无效的。 - zeeshan
我遇到了与dialog.setListener(this)出现错误完全相同的问题。有解决方案吗? - John Yang
我已经解决了。只需不要直接将此行放在mBtnSubmit.setOnClickListener内部即可。 - John Yang
你的回答使我省去了许多麻烦。 - suku
@zeeshan @John 你们可以使用 dialog.setListener(ClassName.this); - AMAN SINGH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接