Появление клавиатуры фризит recycleview

221
06 января 2022, 13:20

Есть несколько 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);
        }

    }
}
READ ALSO
MVP andoid и поворот экрана, использование ViewModel

MVP andoid и поворот экрана, использование ViewModel

Задался я вопросом как быть при повороте экрана, если ты используешь паттерн архитектуры MVPУвидел много советов использовать для этого Moxy

88
break в Java выход из цикла

break в Java выход из цикла

Всем доброго времени! Данный код взят из книги Head First JavaПри выполнении данного кода получается вывод в консоль в виде :"6 14"

87
Эффект появления/затухания в Java fx

Эффект появления/затухания в Java fx

Не могу разобраться, какой bind нужно прикручивать к элементам Java FX, чтобы получить эффект появления затухания, влияя на него из Task()

107
Одинаковая высота flex-item в независимых flex-container

Одинаковая высота flex-item в независимых flex-container

Имеется вот такая конструкция:

84