MaterialChipsInput icon indicating copy to clipboard operation
MaterialChipsInput copied to clipboard

FilterableList with data from external sources

Open marconi1992 opened this issue 7 years ago • 6 comments

For example I want to provide suggestions on the FilteredListView with data from a REST API , but not is possible because the method filterList into the class ChipsInput is called before of provide the external suggestions.

 mProductTags.addChipsListener(new ChipsInput.ChipsListener() {
            Handler handler = new Handler(Looper.getMainLooper());
            Runnable workRunnable;

            @Override
            public void onChipAdded(ChipInterface chipInterface, int i) {

            }

            @Override
            public void onChipRemoved(ChipInterface chipInterface, int i) {

            }

            @Override
            public void onTextChanged(final CharSequence charSequence) {

                handler.removeCallbacks(workRunnable);
                workRunnable = new Runnable() {
                    @Override
                    public void run() {
                        queryTags(charSequence);
                    }
                };
                handler.postDelayed(workRunnable, 500);
            }
        });

marconi1992 avatar May 03 '17 00:05 marconi1992

You want to make a request to your REST API based on what the users typed, and populate the filterable list with that ? So each time the user types, you make your request to your API and get a list already filtered ?

If this is what your want, for now this is not possible, and you have to make the view that shows the suggestions on your own. Because, for now, the FilterableList is supposed to be all the suggestions, and not a list of suggestions already filtered.

But It can be a good thing to add this feature in the library. I will look into it.

pchmn avatar May 03 '17 14:05 pchmn

Yes I want populate the filterable list with that. I forked your library and I'm working in implement it, I'm going to make a pull request when the changes are available.

Thanks for the quick reply.

marconi1992 avatar May 04 '17 14:05 marconi1992

Hi @marconi1992, this would be quite useful as most of the time, the data required to populate the list is supplied by an external API, and the dataset could be very large to pre-load it when setting up the view.

What's your strategy for implementing this?

janakagamini avatar May 16 '17 02:05 janakagamini

It would also be useful if the dataset is local but too large to load into memory at once.

or-else avatar May 30 '17 04:05 or-else

Hi, In my case I used an AutocompleteTextView instead of the default list, therefore you can implement a custom adapter to get the data on-demand. https://github.com/marconi1992/MaterialChipsInput/commit/565a92da916ef29df304a463c2528cff7f344c62

        mBusinessTags.setFilterableList(new ArrayList<ChipInterface>()); // init empty default list

        mTagSuggestionsAdapter = new TagSuggestionsAdapter(getContext(), TagRepository.BUSINESS_SCOPE);

        mBusinessTags.getEditText().setAdapter(mTagSuggestionsAdapter);
        mBusinessTags.getEditText().setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                mBusinessTags.addChip(mTagSuggestionsAdapter.getItem(position));
            }
        });

If someone wants to implement it needs replace the official dependency by this

compile 'com.github.marconi1992:MaterialChipsInput:1.1.2'

it's just a temporary fix, I hope we might find a better solution.

marconi1992 avatar Aug 21 '17 14:08 marconi1992

@marconi1992 can you link the TagSuggestionAdapter ??

VexGod avatar Jul 31 '18 15:07 VexGod