基本上,我正在制作一个测验应用程序,在应用程序结束时,我有一个应该显示用户进度的方法。基本上我想为用户输入的每个不正确的答案添加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是问题在眼前。不知道为什么。
答案 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);
现在它正确地引用了正确的线性布局。