設定ダイアログのビューとして動的にロードされるxmlレイアウトで定義されているEditTextを取得する必要があります。
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
}
}
編集:ソリューション by 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);
}
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);
LayoutInflaterは、実行時にXMLファイルに基づいてビューを作成(または入力)するために必要です。たとえば、ListViewアイテムのビューを動的に生成する必要がある場合です。 Androidアプリケーションのレイアウトインフレータとは何ですか?
LayoutInflater inflater = getActivity().getLayoutInflater();
View view= inflater.inflate(R.layout.your_xml_file, null);
TextView textView = (TextView)view.findViewById(R.id.text_view_id_in_your_xml_file);
textView.setText("Hello!");