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

需要 LayoutInflater 在运行时基于 XML 文件创建(或填充)视图。例如,如果您需要为 ListView 项动态生成视图。 Android 应用程序中的布局充气器是什么?

  1. 创建您的 LayoutInflater:

LayoutInflater inflater = getActivity().getLayoutInflater();

  1. 通过引用 your_xml_file 的 inflater 创建您的视图:

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 回答