在片段内动态添加textView会给出null引用

时间:2017-07-30 18:22:58

标签: android view

基本上,我正在制作一个测验应用程序,在应用程序结束时,我有一个应该显示用户进度的方法。基本上我想为用户输入的每个不正确的答案添加textViews,但它告诉我它们都是空的。这是代码:

public void progFinish() {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_progress, null);

        TextView title = (TextView) mView.findViewById(R.id.title_dialog);
        int total = wrongChars.size();
        LinearLayout linearLayout = (LinearLayout) mView.findViewById(R.id.prog_dialog);

        for(Map.Entry<String, Integer> entry : wrongChars.entrySet()) {
            Log.d("test", entry.getKey());
            TextView wrongChar = new TextView(getActivity());
            wrongChar.setText(entry.getKey() + " \t" + entry.getValue() + " ");
            wrongChar.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));

            linearLayout.addView(wrongChar);
        }

        builder.setView(view);
        AlertDialog dialog = builder.create();
        dialog.show();

    }

我不确定这里的问题。值得注意的是,有一个成员变量

protected View mView

在onViewCreated中初始化。有没有特别的原因,他们是空的?我将假设它是因为mView - 但我不确定。

这是返回错误的行:

linearLayout.addView(wrongChar);

Attempt to invoke virtual method 'void android.widget.LinearLayout.addView(android.view.View)' on a null object reference

编辑:重要的是要注意,布局中静态的textview被夸大了(当用户没有出错时会显示。)所以我认为可以安全地假设动态添加的textViews是问题在眼前。不知道为什么。

1 个答案:

答案 0 :(得分:1)

当你使用时,结果证明:

findViewById(R.id.name_of_view);

您将返回活动/片段布局内的视图。就我而言,因为它是一个对话框,手头的布局与片段不同,所以它返回null,因为没有存在该ID的线性布局。

要修复它,我只需将其更改为:

        View view = getActivity().getLayoutInflater().inflate(R.layout.dialog_progress, null);
        LinearLayout linearLayout = (LinearLayout) view.findViewById(R.id.prog_dialog);

现在它正确地引用了正确的线性布局。