2012-09-17 2 views
1

У меня есть один EditText в моем xml.It исключает исключение, но текст "kailash" Я установил в EditText не отображается. Он показывает мне пустой EditText. В отладке я показываю, что компилятор выполняет tx1.setText("kailash"); Но не знаю, что это не работает. У меня есть простой MainActivity, в котором есть кнопка поиска и onclick из search button Я пытаюсь отобразить диалог. Пожалуйста, помогите мне. Это мой код: -setText() не работает

Dialog dialog = new Dialog(MainActivity.this); 
dialog.setContentView(R.layout.search_dialog); 
RelativeLayout layout = (RelativeLayout) MainActivity.this.getLayoutInflater() 
             .inflate(R.layout.search_dialog, null); 
EditText txt1 = (EditText) layout.findViewById(R.id.txt1); 
txt1.setText("kailash"); 
dialog.show(); 

это мой XML-код:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 

<EditText 
     android:id="@+id/txt1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:background="@android:drawable/editbox_background" 
    android:textSize="16dp" /> 
</RelativeLayout> 
+0

Приложите отладчик и проверьте, что такое значение txt1 ... независимо от того, идет ли управление даже рядом с ним. С такой меньшей информацией, довольно сложно получить помощь –

+0

txt1 показать на экране? – Blackbelt

+2

@ KailashDabhi также отправляет полный код Java и xml-файл. –

ответ

0

на самом деле решение очень просто я помещал этот код:

dialog.setContentView(R.layout.search_dialog); 
RelativeLayout layout = (RelativeLayout) MainActivity.this.getLayoutInflater() 
            .inflate(R.layout.search_dialog, null); 

вместо этого кода:

RelativeLayout layout = (RelativeLayout) MainActivity.this.getLayoutInflater() 
            .inflate(R.layout.search_dialog, null); 
dialog.setContentView(R.layout.search_dialog); 

как действие имеет другой макет в свой метод setcontentView(), поэтому он не распознает другой макет, поэтому вы должны сначала загрузить макет с помощью надувателя и поместить его в метод setContentView диалогового окна, чтобы он работал. надеюсь, что это поможет кому-то. и спасибо за поддержку ур.

1
final EditText txt1 = (EditText) findViewById(R.id.txt1); 
txt1.setText("kailash"); 

вызов findViewById на вашей деятельности класса, а не RelativeLayout просто надуть (без причины ИМХО)

+0

Я пробовал это ... и поскольку у моей активности есть другой макет в setcontentview, поэтому моя активность не распознает id другого макета –

+0

Ваш текст отсутствует в вашем макете активности? Итак, как вы ожидаете, что он будет обновлен? Вы должны опубликовать макет, который находится в вашем задании setContentView ... –

+0

посмотреть, что я хочу открыть диалог в этой деятельности, поэтому я думаю, что это не проблема –

0

набор текста как этот

View vv;   
    LayoutInflater inflater = (LayoutInflater) YourClassName.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
    vv = inflater.inflate(R.layout.rowrelative, null);  
    EditText edt =(EditText) vv.findViewById(R.id.editText1); 
    edt.setText("Ankit");  
    this.addContentView(vv, new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT)); 

Здесь вам нужно изменить название своего класса и имя файла Rowxml

+0

Можете ли вы объяснить, что отличается от вашего и [этого ответа] (http://stackoverflow.com/a/12457072/1050058)? –

+0

извините за lat updte –

+0

это может вам помочь –

1

Вы не можете изменить final - это постоянный. Определить его без конечного модификатора установите текст, а затем указать другой экземпляр в качестве окончательного

+0

Я тоже пробовал, но тоже не работал –

+0

, а затем относительный макет добавлен в представление, которое вы показываете? Вы раздуваете представление, но не добавляете его нигде – mihail

1

Назад к оригинальной публикации.

Kailash, похоже, что код сначала устанавливает вид содержимого диалогового окна из XML-макета: dialog.setContentView (R.layout.search_dialog);

... а затем создает ДРУГОЙ экземпляр того же ресурса, раздувая его на другой объект, макет.

Затем вы изменяете текстовое представление в последнем, но Android показывает прежний вид.

Как насчет этого?

EditText txt1 = (EditText) диалог .findViewById (R.id.txt1);

1

Ну, хотя и успешный, этот обмен строки выглядит как магия. Может быть просто конкретным внедрением, совпадением - склонностью к регрессу. Это может зависеть от внутренних компонентов надувных элементов, где кешируются объекты макета и т. Д. Вы все еще раздуваете экземпляр объекта, потенциально отличный от представления содержимого. Если в текущей реализации ситуация будет одинаковой, существует ли какая-либо гарантия, что она всегда будет такой же? ОКТЯБРЬ, .findViewById кажется более надежным: вы просто получаете ссылку на компонент в диалоговом окне - точно так же, как и с Activity.

Я ничего не пропустил?

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