2016-04-27 2 views
-1

Я отправляю диалоговое окно с помощью обработчика в пользовательский интерфейс и хочу получить строку из EditText, когда я нажимаю OK, но всегда возвращает пустую строку. Мой код: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). 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); 

Днем кодирования. !!!

Смежные вопросы