(1)Android自定义对话框是一种非常实用的控件。与AlertDialog不同的是,自定义Dialog没有ALertDialog的builder,因此在Button按钮监听这一块需要自己定义,这也使自定义Dialog变得比较复杂。常用的是在Dialog中
(2)Android自定义Dialog运行时往往需要与调用它的Activity进行数据传递,比如Dialog中的EditText输入的数据需要回调到Activity中使用,这个功能在C#中式非常常见的。但Android与C#所不一样的是。当Dialog运行时,Android是非阻塞的,也就是其下的.show()之下的代码还是会继续运行,而C#则是阻塞的。因此很多习惯C#的朋友在遇到Android的Dialog运行时,也是希望在show()之后直接获取Dialog中的数据。这事实上是行不通的。一种比较可行的方法是在自定义Dialog类时声明数据回调的接口,然后在Activity中实现接口的方法。
以下是一个简单的例子,用于解决这两个问题:
- public class InputDialog extends Dialog
- { private Context context;
- private EditText editText;
- private Button button_sure;
- private Button button_cancel;
- public OnSureClickListener mListener;
-
- public InputDialog(Context context)
- {
- super(context);
- this.context = context; }
- public InputDialog(Context context,OnSureClickListener listener)
- //对InputDialog的构造函数进行重载,添加了OnSureClickListener这个参数
- {
- super(context);
- mListener = listener;
- }
- protected void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- this.setContentView(R.layout.project_edit_dialog);
- setView();
- }
- private void setView()
- {
- button_sure = (Button) findViewById(R.id.button_project_dialog_sure);
- button_cancel = (Button) findViewById(R.id.button_project_dialog_cancel);
- editText = (EditText) findViewById(R.id.edit_project_new_name);
- //这里的监听事件,因为该类继承lDialog类的DialogInterface,而DialogInterface中也有OnClickListener,因此需要用到全名View.OnClickListener
- button_sure.setOnClickListener(new View.OnClickListener()
- {
- public void onClick(View v)
- {
- mListener.getText(editText.getText().toString());
- dismiss();
- }
- });
- button_cancel.setOnClickListener(new View.OnClickListener()
- {
- public void onClick(View v)
- {
- mListener.getText(editText.getText().toString());//在Button监听事件中实现这一方法
- dismiss();
- }
- });
- }
-
- public interface OnSureClickListener
- {
- void getText(String string); //声明获取EditText中数据的接口
- }
- }<pre class="java" name="code"> </pre><br>
- <pre></pre>
- <p>以上代码完成了自定义Dialog类的构建。接下来,如果想要在Activity中获取Dialog中的数据,只需实例化Dialog即可。</p>
- <pre class="java" name="code">OnClickListener click_new = new OnClickListener()
- {
- public void onClick(View v)
- {
- OnSureClickListener listener1 = new OnSureClickListener(){
- public void getText(String string)
- {
- inputFile = string;
- try
- {
- addFile();
- } catch (IOException e){}
- }
- };
- InputDialog d1 = new InputDialog(ProjectActivity.this,listener1);
- d1.show();
- }
-
- };</pre>
- <p>在一个普通的Button OnClickListener中,实例化一个OnSureClickListener,Dialog中的EditText值便赋予给了Activity的成员变量inputFile。</p>
- <p> 一</p>
- <p> </p>
- <pre></pre>
|