Ok so the issue is what I noticed: you are mixing index and positions.
A ListView contains only as many items as it needs to fill the screen.
For instance, you can see 8 items on screens, there are 8 children in
the ListView, numbered from 0 to 7 (the index.) However, your adapter
can have many more items, for instance 400. The position (arg2 in your
code) indicates the index of an item *in the adapter*. This means that
the View of index 2 is not necessarily the adapter's item of position
2. To do the conversion, you can use
ListView.getFirstVisiblePosition().
Here is your code with the fix:
if (i==arg2) becomes if (getListView().getFirstVisiblePosition() + i == arg2)
and all the getChildAt(arg2) become getChildAt(arg2 -
getListView().getFirstVisiblePosition())
On Wed, Oct 22, 2008 at 8:20 PM, kingkung <[EMAIL PROTECTED]> wrote:
>
> I just sent you an email explaining the problem to your google
> account. :)
>
> On Oct 22, 7:51 pm, "Romain Guy" <[EMAIL PROTECTED]> wrote:
>> Could you please explain what you are witnessing? (I work on ListView,
>> I'd like to help... :)
>>
>> There's another issue in your code. In the for loop, you are comparing
>> a position (arg2) with an index (i). These are different and mixing
>> them will cause tons of "weird" issues.
>>
>>
>>
>> On Wed, Oct 22, 2008 at 7:49 PM, kingkung <[EMAIL PROTECTED]> wrote:
>>
>> > I kind of wanted people to try it and find out :) I can try that, but
>> > it doesn't look like it's a race condition (like something gets called
>> > too early or something) of any kind... it's a very distinct pattern of
>> > behavior that's happening, though it's not what I would consider the
>> > expected behavior...
>>
>> > On Oct 22, 7:40 pm, "Romain Guy" <[EMAIL PROTECTED]> wrote:
>> >> You haven't explained what the crazy behavior is :) My bet is that you
>> >> call isChecked() too early. Try to postpone everything you do in the
>> >> OnItemClickListener by posting a Runnable into a Handler (or with
>> >> getListView().post()).
>>
>> >> On Wed, Oct 22, 2008 at 7:31 PM, kingkung <[EMAIL PROTECTED]> wrote:
>>
>> >> > I wrote a small activity which illustrates some crazy behavior I found
>> >> > while implementing ListView and choices. Feel free to plug this in
>> >> > and try it yourselves (and be sure to check logcat as well):
>>
>> >> > public class TestActivity extends ListActivity {
>>
>> >> > public String[] strings = {
>> >> > "What","the","devil","is","happening?" };
>>
>> >> > @Override
>> >> > public void onCreate(Bundle icicle) {
>> >> > super.onCreate(icicle);
>> >> > setContentView(R.layout.listview);
>> >> > getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
>> >> > getListView().setAdapter(new
>> >> > ArrayAdapter<String>(this,R.layout.main,strings));
>> >> > getListView().setOnItemClickListener(new OnItemClickListener()
>> >> > {
>> >> > public void onItemClick(AdapterView<?> arg0,
>> >> > View arg1, int arg2,
>> >> > long arg3) {
>> >> > Log.d("test","Checked: "+
>> >> > ((TextView)getListView().getChildAt(arg2)).getText().toString());
>> >> > if
>> >> > (getListView().isItemChecked(arg2))
>> >> > {
>> >> > for (int i=0;
>> >> > i<getListView().getChildCount(); i++)
>> >> > {
>> >> > if (i==arg2)
>> >> >
>> >> > getListView().getChildAt(i).setBackgroundColor(Color.MAGENTA);
>> >> > else
>>
>> >> > getListView().getChildAt(i).setBackgroundColor(Color.TRANSPARENT);
>> >> > }
>> >> > }
>> >> > else
>>
>> >> > getListView().getChildAt(arg2).setBackgroundColor(Color.TRANSPARENT);
>>
>> >> > }
>> >> > });
>> >> > }
>> >> > }
>>
>> >> > The R.layout.main is just your standard default TextView when you
>> >> > create a new project in Eclipse. The R.layout.listview is the
>> >> > standard LinearLayout with embedded ListView for ListActivities shown
>> >> > below:
>>
>> >> > <?xml version="1.0" encoding="utf-8"?>
>> >> > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/
>> >> > android"
>> >> > android:layout_width="fill_parent"
>> >> > android:layout_height="fill_parent"
>> >> > android:orientation="vertical"
>>
>> >> > <ListView android:id="@+id/android:list"
>> >> > android:layout_width="fill_parent"
>> >> > android:layout_height="wrap_content"
>> >> > />
>> >> > </LinearLayout>
>>
>> >> > Can anyone explain rationally what is causing this to happen?
>>
>> >> --
>> >> Romain Guywww.curious-creature.org
>>
>> --
>> Romain Guywww.curious-creature.org
> >
>
--
Romain Guy
www.curious-creature.org
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---