我已将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" />
答案 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。你应该检查一下。