【问题标题】:How to put an EditText in a DialogBox?如何将 EditText 放入对话框中?
【发布时间】:2014-01-27 01:00:30
【问题描述】:

我有这个代码:

<EditText
        android:id="@+id/etC" 
        android:layout_height="wrap_content"
        android:layout_width="fill_parent"
        android:hint="@string/amount_credits"
        android:inputType="number"
        android:imeOptions="actionDone" 
        android:singleLine="true" />

    AlertDialog.Builder creditsBox = new AlertDialog.Builder(this);
    edC = (EditText) findViewById(R.id.etC); 
    creditsBox.setView(edC); //THIS LINE MAKES THE APP CRASH
    creditsBox.setMessage("Enter amount of credits")
      .setCancelable(false)
       .setPositiveButton("Ok", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface arg0, int arg1) {
            // TODO Auto-generated method stub

        }
    });
    AlertDialog creditsBoxC = creditsBox.create(); 
    creditsBoxC.show();

现在我不明白问题出在哪里。任何人都可以帮助我吗?谢谢。

【问题讨论】:

    标签: java android android-edittext dialog


    【解决方案1】:

    我认为你不能这样设置 EditText

    试试这个:

    • 创建新布局(包含 EditText)
    • 扩展该布局
    • 为 AlertDialog 设置该布局

    这里是res/layout/prompts.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/layout_root"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical"
        android:padding="10dp" >
    
        <EditText
            android:id="@+id/edt_nm"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
    
            <requestFocus />
    
        </EditText>
    
    </LinearLayout>
    

    在你的Activity

    LayoutInflater li = LayoutInflater.from(context);
                    View promptsView = li.inflate(R.layout.prompts, null);
    
                    AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                            context);
    
                    // set prompts.xml to alertdialog builder
                    alertDialogBuilder.setView(promptsView);
    
                    final EditText userInput = (EditText) promptsView
                            .findViewById(R.id.edt_nm);
    
                    // set dialog message
                    alertDialogBuilder
                        .setCancelable(false)
                        .setPositiveButton("OK",
                          new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,int id) {
                            // get user input and set it to result
                            // edit text
                            result.setText(userInput.getText());
                            }
                          })
                        .setNegativeButton("Cancel",
                          new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,int id) {
                            dialog.cancel();
                            }
                          });
    
                    // create alert dialog
                    AlertDialog alertDialog = alertDialogBuilder.create();
    
                    // show it
                    alertDialog.show();
    

    【讨论】:

      【解决方案2】:

      我猜您在“视图已经有父级”的某处收到错误消息 问题是,您每次构建警报时都试图重用相同的 EditText 对象。 因此,要么通过使用 edc = new EditText(); 动态创建它来获取一个新的 EditText 对象 或者使用inflate() 方法而不是findViewById(),因为膨胀它每次都会给你一个新的实例。

      【讨论】:

        【解决方案3】:

        试试这个

        EditText etC;
        
        LayoutInflater factory = LayoutInflater.from(yourActivity.this);
        final View textEntryView = factory.inflate(R.layout.yourlayout, null);          
        etC= (EditText)textEntryView.findViewById(R.id.etC);
        
        new AlertDialog.Builder(yourActivity.this)
        .setTitle("xx")
        .setIcon(R.drawable.logo3)
        .setView(textEntryView)
        .....
        

        【讨论】:

          【解决方案4】:

          看这个例子

          LayoutInflater li = LayoutInflater.from(classname.this);    
          View dialogView =li.inflate(R.layout.common_dialog_layout, null);
          AlertDialog.Builder dialogwindow = new AlertDialog.Builder(classname.this);
                                          dialogwindow.setView(dialogView);_addEditText = (EditText) dialogView.findViewById(R.id.editTextDialogtext);
          _dialogTextView=(TextView)dialogView.findViewById(R.id.dialog_textview);
          

          这里是xml类

          <?xml version="1.0" encoding="utf-8"?>
          <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/layout_root"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:orientation="vertical"
              android:padding="10dp" >
          
              <TextView
                  android:id="@+id/dialog_textview"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:text="Type Your Text : "
                  android:textAppearance="?android:attr/textAppearanceLarge" />
          
              <EditText
                  android:id="@+id/editTextDialogtext"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content" >
          
                  <requestFocus />
          
              </EditText>
          

          【讨论】:

            猜你喜欢
            • 2017-03-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-10
            • 1970-01-01
            • 1970-01-01
            • 2017-08-11
            • 1970-01-01
            相关资源
            最近更新 更多