2016-04-27 199 views
-1

我发布了一个对话框窗口通过处理程序到用户界面,并希望从EditText检索字符串,当我点击确定,但它总是返回空字符串。 我的代码:Edittext返回空字符串

public void showLabelDialog() { 
    handler.post(new Runnable() { 
     @Override 
     public void run() { 
      AlertDialog.Builder builder = new AlertDialog.Builder((Activity) getThis()); 
      LayoutInflater inflater = ((Activity) getThis()).getLayoutInflater(); 
      View dialogView = inflater.inflate(R.layout.label_dialog, null); 
      final EditText edt=(EditText) findViewById(R.id.label_dialog); 
      builder.setView(dialogView); 
      builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        setCurrentLabel(edt.getText().toString()); 
        System.out.println("Current text:" + edt.getText().toString()); 
        labeled = true; 
       } 
      }); 
      builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        setCurrentLabel(null); 
        labeled = true; 
       } 
      }); 
      AlertDialog b = builder.create(); 
      b.show(); 
     } 
    }); 
} 

输出是:

I/System.out的:当前的文本:

的label_dialog.xml是:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:padding="10dp" 
android:orientation="vertical"> 
<EditText 
    android:id="@+id/label_dialog" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:title="@string/label_dialog" 
    android:inputType="text" /> 
</LinearLayout> 
+0

你可以发布label_dialog.xml吗? – Raghavendra

+1

尝试使用最终的'EditText edt =(EditText)dialogview。 findViewById(R.id.label_dialog);' – vijaypalod

+0

问题已解决,但我会发布label_dialog.xml以防万一。 – rozsatib

回答

3

请从打电话给你EditText你的对话视图,你现在正在活动中引用edittext,但你需要从你的对话框视图中调用它。

final EditText edt = (EditText) dialogView.findViewById(R.id.label_dialog);

1

试试这个,

public void showLabelDialog() { 

      AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
      LayoutInflater inflater = (MainActivity.this).getLayoutInflater(); 
      View dialogView = inflater.inflate(R.layout.label_dialog, null); 
      final EditText edt=(EditText)dialogView.findViewById(R.id.label_dialog); 
      builder.setView(dialogView); 
      builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        //setCurrentLabel(edt.getText().toString()); 
        System.out.println("Current text:" + edt.getText().toString()); 
        //labeled = true; 
       } 
      }); 
      builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        //setCurrentLabel(null); 
        //labeled = true; 
       } 
      }); 
      AlertDialog b = builder.create(); 
      b.show(); 
     } 

即用,

final EditText edt=(EditText)dialogView.findViewById(R.id.label_dialog); 

代替

final EditText edt=(EditText)findViewById(R.id.label_dialog); 

编码愉快。!