现在的位置: 首页 > 综合 > 正文

Android得不到对话框里的值问题

2018年05月01日 ⁄ 综合 ⁄ 共 1722字 ⁄ 字号 评论关闭

     在Android开发过程中,我们可能会做一个对话框,让用户输入一个值,例如:如果想添加一个相册,让用户输入相册的名字“XXX”,然后生成一个名字为“XXX”的相册。可是在做练习的时候却遇到了取不到对话框里值的问题。

     想理解这个问题,首先需要了解在Android中有输入框的对话框是怎么生成的,如下:

   在类的开始声明:

  private EditText etname;

  private View dialogView;

  private EditText etname;

  private String newName;

 

  在类A中代码:

   LayoutInflater factory = LayoutInflater.from(A.this);
   dialogView = factory.inflate(R.layout.f, null);

   AlertDialog f_new = new AlertDialog.Builder(A.this)
   .setTitle("新建")
   .setIcon(R.drawable.star)
   .setView(dialogView)
   .setPositiveButton("确定", new DialogInterface.OnClickListener() {
     @Override
     public void onClick(DialogInterface dialog, int which) {
          etname= (EditText)dialogView.findViewById(R.id.etname);
          newName=etname.getText().toString();

     }
   }

   )//确定设置完
   .setNegativeButton("取消",null)//取消设置完
   .show(); 

  类A的布局文件是:f_menu.xml

  setContentView(R.layout.f_menu);

   对话框里的布局文件f.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:background="#ffffffff"
android:orientation="horizontal">
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/f_rname"
android:text="名字:"
android:textSize="20sp"
/>
<EditText
android:id="@+id/etname"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:minWidth="200dip"
/>
</LinearLayout>

在对话框中又输入框,其实是在对话框中加入了一个布局文件用对话框的serView()方法实现的,如:.setView(dialogView)。

布局文件里有EditText,让用户输入值。

因此如果要想取到对话框里EditText里的值,就需要findViewById的上下文环境是对话框。这样在找标签的时候就是去到对话框的布局文件里找,即dialogView,而不是在对话框所在的类A的布局文件即f_menu.xml里找,因此该用如下语句:etname= (EditText)dialogView.findViewById(R.id.etname);而不能用默认的etname= (EditText)findViewById(R.id.etname);

抱歉!评论已关闭.