MaterialChipsInput
MaterialChipsInput copied to clipboard
FilterableList with data from external sources
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);
}
});
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.
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.
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?
It would also be useful if the dataset is local but too large to load into memory at once.
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 can you link the TagSuggestionAdapter ??