Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sometimes listView.getChildAt(int index) returns NULL (Android)

I have a listView with a custom adapter. When something happens (a click in a child) I do some calculation things and modify the child View. IF some condition has been fulfilled then other child unrelated to the clicked child should be modified.

This sometimes works, but sometimes fails and the DDMS says that the view is null...

Let me show you the code:

        if(invalidaEste != -1)
        {
            try
            {
                View v = lv_data.getChildAt(invalidaEste);
                if( v== null)
                {
                    Log.e("MY_LOG", "SIZE " + lv_data.getCount());
                    Log.e("MY_LOG", "IS_NULL " + String.valueOf(invalidaEste)); 
                }

                if(invalidaEste >= lv_data.getFirstVisiblePosition() &&
                   invalidaEste <= lv_data.getLastVisiblePosition())
                {
                    RelacionFacturaPago rpf = (RelacionFacturaPago)lv_data.getAdapter().getItem(invalidaEste);
                    TextView tv = (TextView)v.findViewById(R.id.tv_pendiente);
                    tv.setText(Formato.double2Screen(rpf.getPorPagar()));
                }
            }
            catch (Exception e)
            {
                Log.e("MY_LOG", "FAIL");
                Log.e("MY_LOG", String.valueOf(invalidaEste));
            }

        }

invalidaEste is the view that I want to modify. When v is null I log the index to check if it is OK. Always is smaller or equal than the listView.getCount()

Why is this happening?

More data: The code is inside of the onAnimationStart(Animation animation) of an AnimationListener listener.

like image 550
Desenfoque Avatar asked Apr 25 '12 15:04

Desenfoque


1 Answers

Because of view recycling, listView.getChildAt() will only return a view for the positions it is displaying, and maybe one more. Maybe if you share more of your code we can help you figure out how to best tackle the problem.

like image 188
dmon Avatar answered Sep 26 '22 22:09

dmon