RecyclerView Adapter выделит выделенный или текущий элемент - PullRequest
0 голосов
/ 06 ноября 2019

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

public class ContentaAdapter extends RecyclerView.Adapter<ContentaAdapter.MyViewHolder>  {

    Context context;

    ArrayList<String> ItemTitle;
    ArrayList<String> ItemSource;

    public ContentaAdapter(Context context, ArrayList<String> ItemTitle, ArrayList<String> ItemSource) {
        this.context = context;
        this.ItemTitle = ItemTitle;
        this.ItemSource = ItemSource;

    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.home_items_layout, parent, false);
        MyViewHolder vh = new MyViewHolder(v);
        return vh;
    }
    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        holder.ItemTitle.setText(ItemTitle.get(position));
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Fragment contentdisplay = new ViewContentFragment();
                Bundle bundle=new Bundle();
                bundle.putStringArrayList("ItemTitle",ItemTitle);
                bundle.putStringArrayList("ItemSource",ItemSource);
                bundle.putInt("position",position);
                bundle.putInt("ItemCounts",ItemTitle.size());
                contentdisplay.setArguments(bundle);
                ((MainActivity)context).replaceFragment(contentdisplay);
            }
        });

    }

    @Override
    public int getItemCount() {
        return ItemTitle.size();
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {
        TextView ItemTitle;
        public MyViewHolder(View itemView) {
            super(itemView);
            ItemTitle = (TextView) itemView.findViewById(R.id.item_title);
        }
    }
}

1 Ответ

0 голосов
/ 06 ноября 2019

вам нужно добавить состояние isSelected в модель данных элемента списка и изменить его onClick.

А когда вы знаете состояние, вы можете изменить фон в ViewHolder

 if (isSelected) {
            //  set selected background here
        } else {
            //  set not selected background here
        }

И вместо того, чтобы хранить два списка в адаптере, вы должны создать один с моделью ArrayList<DataModel>, подобной этой:

class DataModel {
    String ItemTitle;
    String ItemSource;
    Boolean isSelected;
}

, также вы не должны передавать оба списка другому фрагменту, вместо этого берите только то, чтовам нужно, например yourList.get(position);

...