#A0000207564.60 Implementato nuovo adapter per Dropdown

This commit is contained in:
Giuseppe Scorrano 2020-09-28 11:44:23 +02:00
parent 44cca16fec
commit 2f8d549303
2 changed files with 112 additions and 6 deletions

View File

@ -1,6 +1,5 @@
package it.integry.integrywmsnative.gest.ultime_consegne_cliente.dialog;
import androidx.appcompat.app.AlertDialog;
import android.app.DatePickerDialog;
import android.content.Context;
import android.graphics.Color;
@ -9,6 +8,7 @@ import android.view.LayoutInflater;
import android.view.WindowManager;
import android.widget.ArrayAdapter;
import androidx.appcompat.app.AlertDialog;
import androidx.databinding.DataBindingUtil;
import com.annimon.stream.Stream;
@ -22,12 +22,11 @@ import java.util.List;
import it.integry.integrywmsnative.R;
import it.integry.integrywmsnative.core.di.BindableString;
import it.integry.integrywmsnative.core.expansion.RunnableArgs;
import it.integry.integrywmsnative.core.expansion.RunnableArgss;
import it.integry.integrywmsnative.core.model.GtbAnag;
import it.integry.integrywmsnative.core.rest.model.DocumentoResoDTO;
import it.integry.integrywmsnative.core.utility.UtilityDate;
import it.integry.integrywmsnative.core.utility.UtilityString;
import it.integry.integrywmsnative.databinding.DialogUltimeConsegneFiltroAvanzatoBinding;
import it.integry.integrywmsnative.ui.adapter.SimpleAutoCompleteDropdownAdapter;
public class DialogUltimeConsegneFiltroAvanzato {
@ -105,8 +104,7 @@ public class DialogUltimeConsegneFiltroAvanzato {
private void initView(DialogUltimeConsegneFiltroAvanzatoBinding bindings, DialogUltimeConsegneFiltroAvanzatoViewModel viewModel) {
arrayAdapterRagSoc = new ArrayAdapter(mContext, R.layout.dialog_vendita_filtro_avanzato__single_item);
arrayAdapterRagSoc.addAll(getAvailableRagSocs(false));
arrayAdapterRagSoc = new SimpleAutoCompleteDropdownAdapter(mContext, R.layout.dialog_vendita_filtro_avanzato__single_item, getAvailableRagSocs(false));
bindings.filledExposedDropdownRagSoc.setAdapter(arrayAdapterRagSoc);
bindings.filledExposedDropdownDataDoc.setOnClickListener(view -> {
@ -141,7 +139,9 @@ public class DialogUltimeConsegneFiltroAvanzato {
BindableString.registerListener(viewModel.ragSoc, value -> {
if (UtilityString.isNullOrEmpty(value)) currentRagSocPredicate = null;
else {
currentRagSocPredicate = o -> o.getRagSoc().equalsIgnoreCase(viewModel.ragSoc.get());
currentRagSocPredicate = o -> {
return o.getRagSoc().equalsIgnoreCase(viewModel.ragSoc.get());
};
}
refreshList();

View File

@ -0,0 +1,106 @@
package it.integry.integrywmsnative.ui.adapter;
import android.content.Context;
import android.widget.ArrayAdapter;
import android.widget.Filter;
import androidx.annotation.NonNull;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class SimpleAutoCompleteDropdownAdapter extends ArrayAdapter {
private List<Object> mObjects;
public SimpleAutoCompleteDropdownAdapter(@NonNull Context context, int resource) {
super(context, resource);
}
public SimpleAutoCompleteDropdownAdapter(@NonNull Context context, int resource, int textViewResourceId) {
super(context, resource, textViewResourceId);
}
public SimpleAutoCompleteDropdownAdapter(@NonNull Context context, int resource, @NonNull Object[] objects) {
super(context, resource, objects);
mObjects = Arrays.asList(objects);
}
public SimpleAutoCompleteDropdownAdapter(@NonNull Context context, int resource, int textViewResourceId, @NonNull Object[] objects) {
super(context, resource, textViewResourceId, objects);
mObjects = Arrays.asList(objects);
}
public SimpleAutoCompleteDropdownAdapter(@NonNull Context context, int resource, @NonNull List objects) {
super(context, resource, objects);
mObjects = objects;
}
public SimpleAutoCompleteDropdownAdapter(@NonNull Context context, int resource, int textViewResourceId, @NonNull List objects) {
super(context, resource, textViewResourceId, objects);
mObjects = objects;
}
@NonNull
@Override
public Filter getFilter() {
return new StringFilter(mObjects);
}
private class StringFilter<T> extends Filter {
private ArrayList<T> sourceObjects;
public StringFilter(List<T> objects) {
if(objects == null) return;
sourceObjects = new ArrayList<T>();
synchronized (this) {
sourceObjects.addAll(objects);
}
}
@Override
protected FilterResults performFiltering(CharSequence chars) {
String filterSeq = chars.toString().toLowerCase();
FilterResults result = new FilterResults();
if (filterSeq != null && filterSeq.length() > 0) {
ArrayList<T> filter = new ArrayList<T>();
for (T object : sourceObjects) {
// the filtering itself:
if (object.toString().toLowerCase().contains(filterSeq))
filter.add(object);
}
result.count = filter.size();
result.values = filter;
} else {
// add all objects
synchronized (this) {
result.values = sourceObjects;
result.count = sourceObjects.size();
}
}
return result;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
// NOTE: this function is *always* called from the UI thread.
ArrayList<T> filtered = (ArrayList<T>) results.values;
notifyDataSetChanged();
clear();
for (int i = 0, l = filtered.size(); i < l; i++)
add(filtered.get(i));
notifyDataSetInvalidated();
}
}
}