Повторите фон на элементе с помощью прокрутки RecycleAdapter и прокрутите

У меня есть customrecycleAdapter, и когда я нажимаю на элемент, я меняю цвет строки, но если я прокручиваю вид фона, меняю положение или появляюсь на другом элементе. Я читал о Receycle of view, но так, что является решением этой проблемы?

мой адаптер:

public class CustomRecycleAdapter extends RecyclerView.Adapter<CustomRecycleAdapter.ViewHolder> {
    private JSONArray dataSource;
    private AdapterCallback mAdapterCallback;
    public static SparseBooleanArray selectedItems;

    public CustomRecycleAdapter(JSONArray dataArgs, Context context){
        dataSource = dataArgs;
        this.mAdapterCallback = ((AdapterCallback) context);


    }



    public static interface AdapterCallback {
        void onMethodCallback(View caller, JSONObject obj, JSONArray data, int position);
    }


    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        // create a new view
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.list_view_activities, parent, false);

        ViewHolder viewHolder = new ViewHolder(view,  new CustomRecycleAdapter.ViewHolder.IMyViewHolderClicks() {
            public void onClick(View caller, int position) {
                try {

                    JSONObject itemClicked = dataSource.getJSONObject(position);
                    mAdapterCallback.onMethodCallback(caller, itemClicked, dataSource, position);
//                    Log.e("clicked", itemClicked.toString());

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            };
        });

        return viewHolder;

    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        try {

            JSONObject object =  dataSource.getJSONObject(position);
            holder.textView.setText(object.getString("description"));





        } catch (JSONException e) {
            e.printStackTrace();
        }

    }
    @Override
    public int getItemCount() {
        return dataSource.length();
    }

    public JSONObject getItem(int position) throws JSONException {
        return dataSource.getJSONObject(position);
    }

    public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

        public IMyViewHolderClicks mListener;
        public TextView textView;
        public TextView hours;

        public ViewHolder(View itemView, IMyViewHolderClicks listener) {
            super(itemView);
            mListener = listener;
            textView = (TextView) itemView.findViewById(R.id.activity);
            hours = (TextView) itemView.findViewById(R.id.hours);
            itemView.setOnClickListener(this);

        }


        @Override
        public void onClick(View v) {
            int position  = getAdapterPosition();
            Log.e("RecycleAdapterPosition", String.valueOf(getAdapterPosition()));
//            mListener.onClick(v, position);
            v.setBackgroundColor(Color.GREEN);
            v.setSelected(true);


        }
        public interface IMyViewHolderClicks {


            public void onClick(View caller, int position);
        }
    }




}

Поэтому я нажимаю на элемент и правильно устанавливаю setBackground, но если я прокручиваю, я вижу другой элемент с установленным фоном и, если прокручиваю вверх свой элемент, у которого я выбрал, не будет фона.

1 ответ

Решение

RecyclerView повторно использует представление, чтобы закрасить следующие элементы вашего списка, которые будут отображаться, поэтому в наборе с новыми данными, но по-прежнему сохраняются старые стили, из-за чего вы видите другой элемент списка с новым цветом.

Вы должны создать массив хранения, если этот элемент проверен или нет, и они проверяют, был ли проверен, когда onBindViewHolder() называется

@Override
public void onBindViewHolder(final YourViewHolder holder, final int position) {

    if(checked[position]){
        //YourViewHolder change colour

    }

}
Другие вопросы по тегам