0

我已将 TextView 数组定义为最终数组。我为所有数组元素设置了一个 OnClickListener(),并且我可以使用 setBackground (即使数组没有设置为最终数组)。但我不能使用在操作期间返回 NullPointerException 的 getText() 方法。

你们知道为什么会出现问题吗?

final ArrayList<TextView> seats = new ArrayList<TextView>();

@Override
public void onCreate(Bundle savedInstanceState) {
    .
    .
    seats.add((TextView) findViewById(R.id.A1));
    seats.add((TextView) findViewById(R.id.A2));
    seats.add((TextView) findViewById(R.id.A3));
    .
    .
    for (int i = 0; i<seats.size(); i++)
        seats.get(i).setOnClickListener(seatClick);
    .
    .
}
OnClickListener seatClick = new OnClickListener()
{
    @Override
    public void onClick(View v)
    {
        v.setBackgroundColor(-16711681);
        Toast.makeText(getApplicationContext(), ((TextView)v).getText().toString(), Toast.LENGTH_SHORT);
    }
};

TextView 的定义如下:

<TextView
        android:id="@+id/A1"
        android:background="#0AFC1A"
        android:textColor="#FFFFFF"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:gravity="center"
        android:text="A1" />
4

2 回答 2

0

我测试了你的代码它工作正常。只是改变它。

 Toast.makeText(getApplicationContext(), ((TextView)v).getText().toString(), Toast.LENGTH_SHORT).show();

这是完整的代码

seats.add((TextView) findViewById(R.id.textView2));
            seats.add((TextView) findViewById(R.id.textView3));
            seats.add((TextView) findViewById(R.id.textView4));



            OnClickListener seatClick = new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                  v.setBackgroundColor(-16711681);
                      Toast.makeText(getApplicationContext(), ((TextView)v).getText().toString(), Toast.LENGTH_SHORT).show();
                }
            };

            for (int i = 0; i<seats.size(); i++)
                seats.get(i).setOnClickListener(seatClick);
于 2012-06-19T04:52:57.270 回答
0

语句v.setBackgroundColor(-16711681);如您所说成功运行,因此您的v对象是完美的而不是null. 我猜你的 getText 方法在这里((TextView)v).getText()返回null,所以在 NPE中调用toString()on结果。null你应该检查一下。

于 2012-06-19T04:53:14.290 回答