You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@flex.apache.org by Matthew Weir <ma...@yahoo.com.INVALID> on 2016/09/29 20:21:08 UTC

Clearing List Control

I'm stumped guys.  I must be missing something completely, ridiculously, easy.
list.selectedIndices = new Vector.<int>();
                var ac:ArrayCollection = list.dataProvider as ArrayCollection;
                list.dataProvider = null;
                ac.refresh();
                list.selectedIndices = null;
                list.selectedIndex = -1;
                list.dataProvider = ac;
                list.invalidateDisplayList();
                list.validateNow()
Still shows selected items.
Help!  Please :)


Re: Clearing List Control

Posted by Alex Harui <ah...@adobe.com>.
I don't know if you are referring to MX List or Spark List, but it may not
matter.  IIRC, there is logic in the List classes to recalculate selection
when the data provider is changed.  For sure, most of Flex uses an
invalidation/validation model.  This allows you to set a property multiple
times without it actually having an effect on the component.  I'd bet if
you sprinkled a few more validateNow() calls in there you'd get different
results.

IOW, if at some point:

  list.dataProvider = ac;

Later if you just do:
  list.dataProvider = null;
  list.dataProvider = ac;

It may not have an affect since the change to DP will not be processed
until later (or on validateNow()).

By making a deep copy of the original DP, you are changing the DP and the
UID of its items to something different which might trigger the change
detection logic and also result in different behavior.


HTH,
-Alex

On 9/29/16, 1:47 PM, "Matthew Weir" <ma...@yahoo.com.INVALID> wrote:

>Apparently this works,  But I don't understand why you just can't say the
>selectedIndicies are null or new Vector<int>
>var ac:ArrayCollection = new
>ArrayCollection(ObjectUtil.copy((list.dataProvider as
>ArrayCollection).source) as Array);
>ac.refresh();list.dataProvider = ac;
>
>    On Thursday, September 29, 2016 4:31 PM, Matthew Weir
><ma...@yahoo.com.INVALID> wrote:
> 
>
> I'm stumped guys.  I must be missing something completely, ridiculously,
>easy.
>list.selectedIndices = new Vector.<int>();
>                var ac:ArrayCollection = list.dataProvider as
>ArrayCollection;
>                list.dataProvider = null;
>                ac.refresh();
>                list.selectedIndices = null;
>                list.selectedIndex = -1;
>                list.dataProvider = ac;
>                list.invalidateDisplayList();
>                list.validateNow()
>Still shows selected items.
>Help!  Please :)
>
>
>   


Re: Clearing List Control

Posted by Kyle McKnight <ka...@gmail.com>.
Nevermind. I'm silly. I just realized what I sent lol. If it's null it'll
set it to a new empty Vector. Ignore me please :)


Kyle McKnight
Senior UI Engineer - Accesso
602.515.1444 (M)

On Thu, Sep 29, 2016 at 4:52 PM, Kyle McKnight <ka...@gmail.com> wrote:

> Did you try list.selectedIndices = []?
>
> The documentation says that the default value is []. So I looked at the
> source for List for selectedIndices setter. Looks like if value is null, it
> won't set the indices, so it won't get updated.
>
> if (value)
>      _proposedSelectedIndices = value;
> else
>      _proposedSelectedIndices = new Vector.<int>();
>
>
>
>
> Kyle McKnight
> Senior UI Engineer - Accesso
> 602.515.1444 (M)
>
> On Thu, Sep 29, 2016 at 4:47 PM, Matthew Weir <
> mattcommark@yahoo.com.invalid> wrote:
>
>> Apparently this works,  But I don't understand why you just can't say the
>> selectedIndicies are null or new Vector<int>
>> var ac:ArrayCollection = new ArrayCollection(ObjectUtil.copy((list.dataProvider
>> as ArrayCollection).source) as Array);
>> ac.refresh();list.dataProvider = ac;
>>
>>     On Thursday, September 29, 2016 4:31 PM, Matthew Weir
>> <ma...@yahoo.com.INVALID> wrote:
>>
>>
>>  I'm stumped guys.  I must be missing something completely, ridiculously,
>> easy.
>> list.selectedIndices = new Vector.<int>();
>>                 var ac:ArrayCollection = list.dataProvider as
>> ArrayCollection;
>>                 list.dataProvider = null;
>>                 ac.refresh();
>>                 list.selectedIndices = null;
>>                 list.selectedIndex = -1;
>>                 list.dataProvider = ac;
>>                 list.invalidateDisplayList();
>>                 list.validateNow()
>> Still shows selected items.
>> Help!  Please :)
>>
>>
>>
>
>
>

Re: Clearing List Control

Posted by Kyle McKnight <ka...@gmail.com>.
Did you try list.selectedIndices = []?

The documentation says that the default value is []. So I looked at the
source for List for selectedIndices setter. Looks like if value is null, it
won't set the indices, so it won't get updated.

if (value)
     _proposedSelectedIndices = value;
else
     _proposedSelectedIndices = new Vector.<int>();




Kyle McKnight
Senior UI Engineer - Accesso
602.515.1444 (M)

On Thu, Sep 29, 2016 at 4:47 PM, Matthew Weir <mattcommark@yahoo.com.invalid
> wrote:

> Apparently this works,  But I don't understand why you just can't say the
> selectedIndicies are null or new Vector<int>
> var ac:ArrayCollection = new ArrayCollection(ObjectUtil.copy((list.dataProvider
> as ArrayCollection).source) as Array);
> ac.refresh();list.dataProvider = ac;
>
>     On Thursday, September 29, 2016 4:31 PM, Matthew Weir
> <ma...@yahoo.com.INVALID> wrote:
>
>
>  I'm stumped guys.  I must be missing something completely, ridiculously,
> easy.
> list.selectedIndices = new Vector.<int>();
>                 var ac:ArrayCollection = list.dataProvider as
> ArrayCollection;
>                 list.dataProvider = null;
>                 ac.refresh();
>                 list.selectedIndices = null;
>                 list.selectedIndex = -1;
>                 list.dataProvider = ac;
>                 list.invalidateDisplayList();
>                 list.validateNow()
> Still shows selected items.
> Help!  Please :)
>
>
>

Re: Clearing List Control

Posted by Matthew Weir <ma...@yahoo.com.INVALID>.
Apparently this works,  But I don't understand why you just can't say the selectedIndicies are null or new Vector<int>
var ac:ArrayCollection = new ArrayCollection(ObjectUtil.copy((list.dataProvider as ArrayCollection).source) as Array);
ac.refresh();list.dataProvider = ac; 

    On Thursday, September 29, 2016 4:31 PM, Matthew Weir <ma...@yahoo.com.INVALID> wrote:
 

 I'm stumped guys.  I must be missing something completely, ridiculously, easy.
list.selectedIndices = new Vector.<int>();
                var ac:ArrayCollection = list.dataProvider as ArrayCollection;
                list.dataProvider = null;
                ac.refresh();
                list.selectedIndices = null;
                list.selectedIndex = -1;
                list.dataProvider = ac;
                list.invalidateDisplayList();
                list.validateNow()
Still shows selected items.
Help!  Please :)