今天學習自定義一個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
有什麼不對或者有更好的方法歡迎指正交流