我要做的是有一个EditText,人们可以输入他们的名字。当人们按下“添加播放器”按钮时,他们刚刚输入的名称将显示在列表表单的下方。所以我创建了8个文本视图,这些文本视图最初是不可见的,但是当人们键入名称时按“添加播放器”按钮,文本将更改为其名称并变为可见。
所以我设置了一个名称列表的TextView数组,它们都是文本视图
TextView[] nameList = new TextView[]{name1, name2, name3, name4, name5, name6, name7, name8};
稍后在onClick部分的代码中,我有
for (int i = 0; i < 8; i++) {
String name = etName.getText().toString();
nameList[i].setText(name);
nameList[i].setVisibility(View.VISIBLE);
}
然而,有了这个,每当我按下“添加播放器”按钮时,应用程序崩溃,我得到一个NullPointerException。我该如何解决这个问题?
问题不在于for循环,因为应用程序在没有它的情况下崩溃了。问题似乎与数组一样,就好像我把
name1.setText(name);
name1.setVisibility(View.VISIBLE);
代码工作正常。
答案 0 :(得分:2)
您的数组似乎没有正确初始化,因为nameList[i]
为空。尝试:
nameList[0] = (TextView) findViewById(R.id.text1);
nameList[1] = (TextView) findViewById(R.id.text2);
// etc
答案 1 :(得分:0)
如果没有关于你在哪里设置etName(这几乎肯定是你的问题)的进一步信息,很难知道你在哪里得到你的空(你的堆栈跟踪会给你一个行号,应该告诉你,顺便说一下)除此之外,你不应该像你一样把一组字段放在一起,然后在你的活动中将数字8设置为硬编码的数字。相反,您应该首先遍历您的活动并根据您有多少名为nameX的视图构建该数组(其中X是一个数字,从0开始向上移动多次)。这样,您将始终拥有完全正确的迭代次数。
如果您不知道如何根据他们的XML ID查找Views
,请插入,我将为其添加代码。