2016-05-31 7 views
0

Пожалуйста, помогите. Я пробовал все, но каждый раз терпел неудачу. Я создаю приложение для Android, где мне нужно программно обновлять текст текстового поля в диалоговом окне. Это диалоговое окно создается с использованием настраиваемого макета. Проводка кода ниже. Пожалуйста, помогите обновить значение tv1 до «Это новый текст». В тексте XML-макета был установлен «старый текст». После запуска этой программы значение tv1 в 'dialogabt' по-прежнему рассматривается как «старый текст».Не удалось обновить текст TextView в настраиваемом диалоговом окне

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

Button b1 = (Button) findViewById(R.id.b1); 

//generating first dialog box 
b1.setOnClickListener(new View.OnClickListener() {  
@Override 
public void onClick(View view) { 
Dialog dialog1 = new Dialog(MainActivity.this); 
dialog1.requestWindowFeature(Window.FEATURE_NO_TITLE); 
dialog1.setContentView(R.layout.setings); 
dialog1.show(); 
} 
});  
} 

//function to generate second dialogbox and update textview's text in it 
public void abtit(View view) { 
Dialog dialogabt = new Dialog(this); 
dialogabt.requestWindowFeature(Window.FEATURE_NO_TITLE); 

LayoutInflater inflater = this.getLayoutInflater(); 
View dialogView = inflater.inflate(R.layout.custom2, null); 
TextView tv1 = (TextView) dialogView.findViewById(R.id.firstapp); 

System.out.println("Going to set new value"); 
tv1.setText("Its new text"); 
System.out.println("done setting new value"); 

dialogabt.setContentView(R.layout.custom2); 
dialogabt.show(); 
} 
} 

setings.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="300dp" 
android:layout_height="wrap_content"  
android:orientation="vertical" > 
<TextView 
android:id="@+id/set3" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:gravity="center" 
android:text="About app"  
android:onClick="abtit" 
/> 
</RelativeLayout> 

custom2.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="315dp" 
android:layout_height="wrap_content" 
android:layout_gravity="center" 
android:background="@drawable/custom_alert2" 
android:orientation="vertical" > 
<TextView 
android:id="@+id/firstapp" 
android:layout_width="wrap_content" 
android:layout_height="100dp" 
android:onClick="openapp2" 
android:text="old text" 
/> 
</RelativeLayout> 
+0

Единственная проблема, которую я нашел с вашим кодом является то, что вы не вызывая метод, который создает второе диалоговое окно. Таким образом, диалоговое окно не создается. – Aradhna

+0

Второе диалоговое окно создается функцией abtit(). Его упоминается в атрибуте onclick layouts.xml. –

ответ

0

Попробуйте это:

LayoutInflater inflater = this.getLayoutInflater(); 
View dialogView = inflater.inflate(R.layout.custom2, null); 

dialogabt.setContentView(R.layout.custom2); 

TextView tv1 = (TextView) dialogabt.findViewById(R.id.firstapp); 

System.out.println("Going to set new value"); 
tv1.setText("Its new text"); 
System.out.println("done setting new value"); 

dialogabt.show(); 
+0

спасибо тонну. Это решило мою проблему. –

0

Снимите следующие строки, потому что вы SETING contentView после установки текста в TextView

dialogabt.setContentView(R.layout.custom2); 

и добавить строка ниже

View dialogView = inflater.inflate(R.layout.custom2, null); 
+0

Где разместить эту строку? Я думаю, что без этой строки мой диалог не будет формироваться из custom2.xml. Попробовали поместить его, прежде чем устанавливать новое значение tv1, но даже это не помогло. –

0

Проверьте abtit() метод, вы устанавливаете значение в одной пользовательской точки зрения и в диалоговом окне предупреждения вы устанавливаете другой вид, так что это не повлияет на значения, которые вы установили для объекта dialogView.

Так просто изменить строку ниже,

dialogabt.setContentView(R.layout.custom2); 

По

dialogabt.setView(dialogView); 

Он будет работать

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