0

TextView 配列を final として定義しました。そして、すべての配列要素に 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((TextView)v).getText()ここでgetTextメソッドが返されると思いますので、 onをnull呼び出すとNPEになります。あなたはそれをチェックする必要があります。toString()null

于 2012-06-19T04:53:14.290 に答える