2011-04-22 54 views
2

我打算構建一個alertdialog視圖並訪問TextView來設置其文本值。下面的代碼:AlertDialog的組件檢索問題 - android

private void ShowLogDialog() { 
    AlertDialog ad = new AlertDialog.Builder(this).create(); 
    ad.setIcon(R.drawable.icon); 
    ad.setTitle("Ultimate Logs"); 
    ad.setView(LayoutInflater.from(this).inflate(R.layout.log_layout, null)); 
    TextView text = (TextView)ad.findViewById(R.id.logTextView_log); // RETURNS NULL 
    //Log.i(TAG, "Into ShowLogDialog : GoT TextView = " + text); 
    //String logsText = ""; 
    //text.setText(logsText); 
    ad.setButton("Ok", new DialogInterface.OnClickListener() {   
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.dismiss(); 
     } 
    }); 
    ad.show(); 
} 

log_layout.xml

<LinearLayout android:id="@+id/linearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" 
      android:orientation="vertical" android:scrollbars="vertical" android:scrollbarAlwaysDrawVerticalTrack="true" xmlns:android="http://schemas.android.com/apk/res/android"> 
      <TextView android:layout_height="wrap_content" android:text="TextView" android:id="@+id/**logTextView_log**" android:layout_width="wrap_content"></TextView> 
     </LinearLayout> 

爲什麼一個我不能夠訪問的TextView?它返回null並拋出NullPointerException。我無法直接使用findBiewById訪問,所以我使用ad.findViewById,但我只收到null。任何人都可以幫助我知道我哪裏錯了!

謝謝

+0

有什麼辦法可以設置AlertDialog的文字字體大小。我的意思是,我可以更改添加到SetMessage()的文本大小。如果這可以實現,那麼我的工作也可以完成。 – Tvd 2011-04-22 10:38:46

回答

2

這似乎工作。玩的開心!

 AlertDialog.Builder builder= new AlertDialog.Builder(this); 
     LayoutInflater inflater= getLayoutInflater(); 
     final View myView= inflater.inflate(R.layout.alert_dialog_text_entry, null); 
     builder.setTitle("About"); 
     builder.setMessage("Test"); 
     builder.setView(myView); 
     AlertDialog alert= builder.create(); 
     TextView stateful= (TextView)myView.findViewById(R.id.TextView01); 
     stateful.setText("More Testing"); 
     Log.d(Utilities.TAG,stateful.toString()); 
     alert.show(); 
+0

謝謝JAL。 myView.findViewbyId()完成了這項工作。 – Tvd 2011-04-25 13:28:25

0

這是什麼意思..?

android:id="@+id/**logTextView_log**

**的一樣嗎?

+0

只是刪除**ñ檢查 – 2011-04-22 10:18:36

+0

我剛剛在這裏發佈id文本BOLD時。而已。沒有其他的。 – Tvd 2011-04-22 10:35:44

+0

只是評論此行TextView text =(TextView)ad.findViewById(R.id.logTextView_log); n檢查對話框n textview是否顯示 – 2011-04-22 10:47:12

0

爲什麼不首先將LayoutInflater.from(this).inflate(R.layout.log_layout, null)變回View變量? (下面的代碼未經測試)

ad.setTitle("Ultimate Logs"); 
    View inflatedView = LayoutInflater.from(this).inflate(R.layout.log_layout, null);   
    TextView text = (TextView)inflatedView.findViewById(R.id.logTextView_log); // RETURNS NULL 
    Log.i(TAG, "Into ShowLogDialog : GoT TextView = " + text); 
    String logsText = ""; 
    text.setText(logsText); 
    ad.setView(inflatedView); 
    ad.setButton("Ok", new DialogInterface.OnClickListener() { 
+0

然後我得到「requestFeature()必須在ad.show()添加內容之前調用」異常。 – Tvd 2011-04-22 10:34:10