如何在android中的接口回调内部传输数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在android中的接口回调内部传输数据相关的知识,希望对你有一定的参考价值。

根据这个link,作者创建了一个对话框,它使用接口回调将数据从对话框传输到活动。

用户使用方法DataBackListener定义getData(String data)接口,

我丢失的地方是用户使用listener.getData(str);将日期传输到getData(String data)方法,data是方法中的参数并且没有返回值,这是如何工作的?或者我应该阅读哪部分java才能理解它?先谢谢

使用界面定义对话框:

/**
 * Created by mhwang on 2015/11/18.
 */
public class MyDialog extends Dialog {
    //callback interface
    public interface DataBackListener{
        public void getData(String data);
    }
    private EditText editText;
    private Button btnSure;

    DataBackListener listener;   //create listener
    public MyDialog(Context context, final DataBackListener listener) {
        super(context);

        //initial listener
        this.listener = listener;
        setContentView(R.layout.dialog);
        editText = (EditText)findViewById(R.id.edit);
        btnSure = (Button)findViewById(R.id.sure);
        btnSure.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String str = editText.getText().toString();

                //call the interface here to transfer the data
                listener.getData(str);
                dismiss();
            }
        });
    }
}

在活动中使用对话框:

public class DialogActivity extends Activity {
    EditText showResult;
    Button btnStartDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dialog);
        showResult = (EditText)findViewById(R.id.showResult);
        btnStartDialog = (Button)findViewById(R.id.start);
        btnStartDialog.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //创建对话框对象的时候对对话框进行监听
                MyDialog dialog = new MyDialog(DialogActivity.this,
                        new MyDialog.DataBackListener() {
                            @Override
                            public void getData(String data) {
                                String result = data;
                                showResult.setText(result);
                            }
                        });
                dialog.show();
            }
        });
    }
答案

结果在DialogActivity中的侦听器内返回:

 btnStartDialog.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //创建对话框对象的时候对对话框进行监听
            MyDialog dialog = new MyDialog(DialogActivity.this,
                    new MyDialog.DataBackListener() {
                        @Override
                        public void getData(String data) {
                            String result = data;            <-----Here
                            showResult.setText(result);
                        }
                    });
            dialog.show();
        }
    });

以上是关于如何在android中的接口回调内部传输数据的主要内容,如果未能解决你的问题,请参考以下文章

android单例中的监听如何回调

在 Android 视图模型中的内部网络更改回调时 LiveData 未触发 - Kotlin

回调函数内部的接口类导致崩溃

Xamarin 中的接口回调

Spring中Bean初始化及销毁方法(InitializingBean接口DisposableBean接口@PostConstruct注解@PreDestroy注解以及init-method(代码片

Android中的接口回调技术