0

我想要做的是有一个 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);

代码运行良好。

4

2 回答 2

2

看起来你没有正确初始化你的数组,因为nameList[i]它是空的。尝试:

nameList[0] = (TextView) findViewById(R.id.text1);
nameList[1] = (TextView) findViewById(R.id.text2);
// etc
于 2013-01-05T18:03:52.637 回答
0

如果没有关于你在哪里设置 etName 的更多信息(这几乎可以肯定是你的问题),很难知道你在哪里得到你的 null (你的堆栈跟踪会给你一个应该告诉你的行号,顺便说一句)但是放在一边从那你不应该像你一样把一个字段数组放在一起,然后在你的活动中将数字 8 设置为硬编码数字。相反,您应该首先遍历您的活动,并根据您有多少名为 nameX 的视图来构造该数组(其中 X 是一个从 0 向上任意次数的数字)。这样,您将始终拥有准确正确的迭代次数。

如果您不知道如何Views根据他们的 XML id 进行查找,请插话,我将为此添加代码。

于 2013-01-05T18:20:16.150 回答