在.xml中初始化的TextView数组的getText()

时间:2012-06-19 04:47:13

标签: android textview nullpointerexception gettext

我已将TextView数组定义为final。 我为所有数组元素设置了一个OnClickListener(), 我可以使用setBackground(即使数组未设置为final)。 但是我不能使用在操作期间返回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" />

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

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