如何获得这是动态加载(的setView)在对话框的布局元素(findViewById)?(How t

2019-07-29 03: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);



}

Answer 1:

既然你正在扩展EditTextPreference你可以只使用getEditText()方法来获取默认文本视图。 然而,由于要设置自己的布局这可能不会做你在找什么。

在你的情况,你应该虚增您的XML布局到一个视图对象,然后找到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);


Answer 2:

LayoutInflater需要根据在运行时XML文件中创建(或填充)查看。 例如,如果你需要动态地生成视图为您的ListView项目。 什么是一个Android应用程序的布局吹气?

  1. 创建LayoutInflater:

LayoutInflater inflater = getActivity().getLayoutInflater();

  1. 通过创建吹气视图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);

  1. 用你的目标:即

textView.setText("Hello!");



文章来源: How to get elements(findViewById) for a layout which is dynamically loaded(setView) in a dialog?