Есть несколько 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);
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Задался я вопросом как быть при повороте экрана, если ты используешь паттерн архитектуры MVPУвидел много советов использовать для этого Moxy
Всем доброго времени! Данный код взят из книги Head First JavaПри выполнении данного кода получается вывод в консоль в виде :"6 14"
Не могу разобраться, какой bind нужно прикручивать к элементам Java FX, чтобы получить эффект появления затухания, влияя на него из Task()