今天学习自定义一个Dialog控件并试着将它封装了,封装就不说了,我自己都还云里雾里呢,下面是自定义的Dialog控件并实现回调的代码
1 自定义的MyDialog控件
package com.example.zinan.base; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; /** * Created by zinan on 10/22/15. */ public class MyDialog extends Dialog { //创建接口,执行相应的操作 //回调接口其实就是一个传递数据的工具 back为需要传值的方法 public interface OnMyDialogListener{ public void back(String name); } private String name; private OnMyDialogListener onMyDialogListener; TextView textView; EditText editText; Button button; //构造函数 public MyDialog(Context context,String name,OnMyDialogListener onMyDialogListener) { super(context); this.name = name; this.onMyDialogListener = onMyDialogListener;//初始化接口,与设置监听一个道理 } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_mydialog); textView = (TextView)findViewById(R.id.textView); textView.setText("自定义控件信息:" +name); editText = (EditText)findViewById(R.id.editText); button = (Button)findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //返回自定义控件的值到主Activity,使用回调实现这个功能 onMyDialogListener.back(editText.getText().toString()); MyDialog.this.dismiss(); } }); } }
2 MainActivity
package com.example.zinan.mydialog; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import com.example.zinan.base.MyDialog; public class MainActivity extends ActionBarActivity { TextView textView ; Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView)findViewById(R.id.textView); button = (Button)findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //声明回调接口的对象,为声明的接口对象赋值 MyDialog myDialog = new MyDialog(MainActivity.this, "我的Dialog", new MyDialog.OnMyDialogListener() { @Override public void back(String name) { textView.setText("成功回调信息:"+name); } }); myDialog.show(); } }); } }
3 效果图
4 布局文件省略昂
5
有什么不对或者有更好的方法欢迎指正交流