Есть несколько recycleview с разным количеством элементов загружаемых с сервера. так же есть searchview реализован getFilter. Проблема в том, что при наличии пары сотен элементов ничего не заметно. Если же больше 1000 то клик по searchview фризит все UI, далее появление клавиатуры, что продолжает фризить как и сворачивание её, такое ощущение что при смене фокуса происходит. Фризит ровно столько же по времени сколько и передача полученных данных с сервера в адаптер.
Код адаптера:
public class AdapterForParamList extends RecyclerView.Adapter<AdapterForParamList.ViewHolderParam> implements Filterable {
private List<String> mDataNameParam;
private List<String> mDataTagParam;
private List<String> mDataHSTNameparam;
// for filter
private List<String> mDataNameParamFull;
// end for filter
private LayoutInflater mInflater;
private StartSession startSession;
private String cehCodeForParams;
public static Boolean changed;
public AdapterForParamList(List<String> mDataNameParam, List<String> mDataTagParam, List<String> mDataHSTNameparam, Context context, StartSession startSession,String cehCodeForParams) {
this.mDataNameParam = mDataNameParam;
this.mDataTagParam = mDataTagParam;
this.mDataHSTNameparam = mDataHSTNameparam;
// for filter
mDataNameParamFull = new ArrayList<>(mDataNameParam);
// end for filter
this.mInflater = LayoutInflater.from(context);
this.startSession = startSession;
this.cehCodeForParams = cehCodeForParams;
changed = false;
}
@NonNull
@Override
public ViewHolderParam onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.list_item_parameter,parent,false);
return new ViewHolderParam(view);
}
@Override
public void onBindViewHolder(@NonNull final ViewHolderParam holder, final int position) {
final String nameParam = mDataNameParam.get(position);
holder.textViewNameParam.setText(nameParam);
if (changed){
notifyDataSetChanged();
changed =false;
}
holder.imageViewAddToFavorite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
Log.d("sysHP","add "+nameParam);
LayoutInflater layoutinflater = LayoutInflater.from(view.getContext());
final View viewDialog = layoutinflater.inflate(R.layout.add_favoritelist_parameter_dialog,null);
final Spinner spinner = (Spinner) viewDialog.findViewById(R.id.spinnerAddFavoriteDialog);
final String[] cehNames = (String[]) FragmentFavorite.arrayCehListFavorite.toArray(new String[FragmentFavorite.arrayCehListFavorite.size()]);
//String[] cehNames = {"1","2","3"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(viewDialog.getContext(), android.R.layout.simple_spinner_item,cehNames );
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setView(viewDialog);
builder.setTitle("HaloPolymer");
builder.setMessage("Добавить "+nameParam+" в избранное?");
builder.setNegativeButton("Отмена",null);
builder.setPositiveButton("Oк",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Log.d("sysHP","Start Add To Favorite Parameter name - "+nameParam+" To - "+spinner.getSelectedItem().toString()+" Ceh Code - "+cehCodeForParams+" TAG ID - "+mDataTagParam.get(position));
startSession.addParameterToFavoriteList(view,spinner.getSelectedItem().toString(),cehCodeForParams,mDataTagParam.get(position));
}
}
);
final AlertDialog dialog = builder.create();
dialog.show();
}
});
holder.imageViewShowDetailParam.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ArrayList<String> dataTagForChart = new ArrayList<>();
ArrayList<String> dataHSTNameForChart = new ArrayList<>();
dataHSTNameForChart.add(mDataHSTNameparam.get(position));
dataTagForChart.add(mDataTagParam.get(position));
startSession.showTrend(dataTagForChart,dataHSTNameForChart);
Log.d("sysHP",mDataTagParam.get(position)+" | "+cehCodeForParams+" | "+nameParam+" | "+mDataHSTNameparam.get(position));
}
});
}
@Override
public int getItemCount() {
return mDataNameParam.size();
}
@Override
public Filter getFilter() {
return dataFilter;
}
private Filter dataFilter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
List<String> filteredList = new ArrayList<>();
if (constraint == null || constraint.length() == 0) {
filteredList.addAll(mDataNameParamFull);
// Log.d("sysHP","FILTREDLIST ALL"+filteredList);
} else {
String filterPattern = constraint.toString().toLowerCase().trim();
for (String item : mDataNameParamFull) {
if (item.toLowerCase().contains(filterPattern)) {
filteredList.add(item);
}
}
// Log.d("sysHP","FILTREDLIST "+filteredList);
}
FilterResults results = new FilterResults();
results.values = filteredList;
//Log.d("sysHP","FILTREDLIST RESULT "+results);
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
mDataNameParam.clear();
mDataNameParam.addAll((List) results.values);
// notifyDataSetChanged();
}
};
class ViewHolderParam extends RecyclerView.ViewHolder {
TextView textViewNameParam;
ImageView imageViewAddToFavorite,imageViewShowDetailParam;
ViewHolderParam(@NonNull View itemView) {
super(itemView);
textViewNameParam = itemView.findViewById(R.id.textViewNameParam);
imageViewAddToFavorite = itemView.findViewById(R.id.imageViewAddToFavorite);
imageViewShowDetailParam = itemView.findViewById(R.id.imageViewShowDetailParam);
}
}
}
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости