在RecyclerView中单击其他位置时,更改另一个适配器位置的内容

时间:2018-01-02 07:48:33

标签: android android-recyclerview

我们假设我们有一个包含7个条目的RecyclerView 当我点击第5个适配器位置的视图时,有没有办法更改第2个适配器位置的内容?

5 个答案:

答案 0 :(得分:0)

在适配器内部更改数组的第5个位置(您将传递给适配器)并且notifyDataSetChanged()

答案 1 :(得分:0)

保持条件(chaning内容)在onBindViewHolder和OnClick上调用notifyDataSetChanged();

答案 2 :(得分:0)

是的,这是可能的。

您需要更新已传递给适配器的列表的值。请更新列表中的期望位置值并通知数据集生效。

答案 3 :(得分:0)

是的,首先你必须在点击第5个位置然后调用adapter.notifyDataSetChanged()时更改第2项数组的内容 所以onBindViewHolder将被调用

或调用notifyItemChanged(1);

答案 4 :(得分:0)

是的,修改条目后可以使用notifyDataSetChanged()。 请参阅下面的示例适配器代码。

public class SampleListAdapter extends RecyclerView.Adapter<SampleListAdapter.ViewHolder>{

    private List<String> listData;
    private Context context;

    public SampleListAdapter(Context context){
        this.context = context;
        listData.add(0, "One");
        listData.add(1, "Two");
        listData.add(2, "Three");
        listData.add(3, "Four");
        listData.add(4, "Five");
        listData.add(5, "Six");
        listData.add(6, "Five");

    }

    public void swapList(List<String> listData) {
        this.listData = listData;
        notifyDataSetChanged();
    }

    class ViewHolder extends RecyclerView.ViewHolder {

        TextView tvDeliveryName;
        View view;

        ViewHolder(View itemView) {
            super(itemView);
            view = itemView;
            tvDeliveryName = itemView.findViewById(R.id.tv_course_name);
        }
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(context).inflate(R.layout.yout_layout, parent, false);
        return new ViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        String data = listData.get(position);
        holder.tvDeliveryName.setText(data);

        holder.view.setTag(position);
        holder.view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int pos = (int) view.getTag();
                if(pos == 1){
                    listData.remove(1);
                    listData.add(1, "Your Data");
                    swapList(listData);
                }
            }
        });
    }

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