web-dev-qa-db-ja.com

ダイアログに動的にロードされる(setView)レイアウトの要素(findViewById)を取得するにはどうすればよいですか?

設定ダイアログのビューとして動的にロードされる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);



}
14
Vikas Singh

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);
19
jjNford

LayoutInflaterは、実行時にXMLファイルに基づいてビューを作成(または入力)するために必要です。たとえば、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!");

9
Sara