2016-05-31 61 views
0

請幫忙。我嘗試了一切,但每次都失敗了。我正在構建一個android應用程序,我需要以編程方式在對話框中更新TextView的文本。 該對話框是使用自定義佈局創建的。在下面發佈代碼,請幫助將tv1的值更新爲「It's new text」。在XML佈局文件中,文本被設置爲「舊文本」。 運行此程序後,'dialogabt'中tv1的值仍被視爲「舊文本」。無法更新自定義對話框中的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()創建。它在setings.xml佈局的onclick屬性中提到。 –

回答

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

刪除以下行,因爲你將文本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); 

它將工作