Search code examples
androidtextviewnullpointerexceptiongettext

getText() of an array of TextView initialized in .xml


I have defined the TextView array as final. And I set a OnClickListener() for all the array elements, and I am able to use setBackground (even the array is not set as final). But I cannot use getText() method which return NullPointerException during operation.

Do you guys know why is the problem existed?

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);
    }
};

The TextView is defined something like this:

<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" />

Solution

  • i tested your code its working fine. just change it.

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

    this is full code

    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);