12

我需要的是在其中動態加載在偏好對話框即視圖中的XML佈局定義的EditText:如何獲取在對話框中動態加載(setView)的佈局的元素(findViewById)?

public class ReportBugPreference extends EditTextPreference { 

    @Override 
    protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { 
     super.onPrepareDialogBuilder(builder); 
     builder.setView(LayoutInflater.from(ctx).inflate(R.layout.preference_report_bug_layout,null)); 
     EditText edttxtBugDesc = (EditText) findViewById(R.id.bug_description_edittext); // NOT WORKING 
    } 

} 

編輯:解通過jjnFord

@Override 
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) { 
    super.onPrepareDialogBuilder(builder); 

    View viewBugReport = LayoutInflater.from(ctx).inflate(R.layout.preference_report_bug,null); 
    EditText edttxtBugDesc = (EditText) viewBugReport.findViewById(R.id.bug_description_edittext); 

    builder.setView(viewBugReport); 



} 

回答

15

既然你正在擴展EditTextPreference,你可以使用getEditText()方法來獲取默認的文本視圖。但是,由於您正在設置自己的佈局,因此這可能不會滿足您的要求。

在你的情況下,你應該將XML佈局充氣到View對象中,然後在視圖中找到editText - 然後你可以將你的視圖傳遞給構建器。沒有嘗試過,但只是看你的代碼,我會認爲這是可能的。

事情是這樣的:需要

View view = (View) LayoutInflater.from(ctx).inflate(R.layout.preference_report_bug_layout, null); 
EditText editText = view.findViewById(R.id.bug_description_edittext); 
builder.setView(view); 
+0

謝謝!解決方案根據您的建議! – 2012-04-25 10:13:29

8

LayoutInflater創建(或填充)基於XML文件中 運行時查看。例如,如果您需要爲您的ListView項目動態生成視圖 。 What is the layout inflater in an Android application?

  1. 創建LayoutInflater:

LayoutInflater inflater = getActivity().getLayoutInflater();

  • 創建由充氣視圖refered到your_xml_file:
  • View view= inflater.inflate(R.layout.your_xml_file, null);

    1. 通過id在佈局中查找您的對象。

    TextView textView = (TextView)view.findViewById(R.id.text_view_id_in_your_xml_file);

  • 用你的目的:即
  • textView.setText("Hello!");