14

設定ダイアログのビューとして動的に読み込まれる 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
    }

}

編集: 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);



}
4

2 に答える 2

19

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);
于 2012-04-25T10:08:29.860 に答える
9

実行時に XML ファイルに基づいてビューを作成 (または塗りつぶす) するには、LayoutInflater が必要です。たとえば、ListView アイテムのビューを動的に生成する必要がある場合などです。 Android アプリケーションのレイアウト インフレータとは何ですか?

  1. LayoutInflater を作成します。

LayoutInflater inflater = getActivity().getLayoutInflater();

  1. 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);

  1. あなたのオブジェクトを使用してください:すなわち

textView.setText("Hello!");

于 2013-09-12T19:57:08.407 に答える