繁体   English   中英

在recyclerview项目上更改notifydataset单击

[英]notifydatasetchanged on recyclerview item click

我有一个带有ImageButtonRecyclerView 我想用ImageButton的onClick()事件中的新项目更新RecyclerView 它可以在我的数据库上正常工作,但不会刷新RecyclerView。

  @Override
public void onBindViewHolder(final ItemViewHolder holder, final int position) {
    final Quote current =  data.get(position);
    holder.quote.setText(current.getQuote());
    holder.name.setText(current.getName());
    holder.number.setText(String.valueOf(current.getId()));

    if (current.getIsLiked()==1){
        holder.quote.setTextColor(Color.parseColor("#c0392b"));
        holder.name.setTextColor(Color.parseColor("#e74c3c"));
        holder.relativeLayout.setBackgroundColor(Color.parseColor("#ecf0f1"));
    }else if (current.getIsLiked()==0){
        holder.quote.setTextColor(Color.parseColor("#ffffff"));
        holder.name.setTextColor(Color.parseColor("#fefefefe"));
        holder.relativeLayout.setBackgroundColor(Color.parseColor("#F5F5F5"));
        holder.relativeLayout.getBackground().setAlpha(11);
    }

    holder.imgIsLiked.setOnClickListener(new View.OnClickListener() {
        DataBaseHelper db=new DataBaseHelper(context);
        @Override
        public void onClick(View v) {
            if (current.getIsLiked()==0){
                db.updateDatabase(current.getId(), 1);
                swap();
            }
            else if (current.getIsLiked()==1){
                db.updateDatabase(current.getId(), 0);
                swap();
            }
        }
    });
}

private void swap(){
    List<Quote> data2 = new ArrayList<Quote>(data);
    data.clear();
    data.addAll(data2);
    notifyDataSetChanged();
}

这是我的芬芳:

 @Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedState){
    setHasOptionsMenu(true);
    View view=inflater.inflate(R.layout.quotes_fragment,container,false);
    recyclerView= (RecyclerView) view.findViewById(R.id.quotes_fragment_recyclerView);
    DataBaseHelper dataBaseHelper=new DataBaseHelper(getContext());
    adapter = new QuoteAdapter(getContext(), dataBaseHelper.getAllData());
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(adapter);

    return view;
}

更新:感谢塞尔文,解决方案是:

        holder.imgIsLiked.setOnClickListener(new View.OnClickListener() {
        DataBaseHelper db = new DataBaseHelper(context);

        @Override
        public void onClick(View v) {
            if (current.getIsLiked() == 0) {
                current.setIsLiked(1);
                db.updateDatabase(current.getId(), 1);
                notifyDataSetChanged();
            } else if (current.getIsLiked() == 1) {
                db.updateDatabase(current.getId(), 0);
                current.setIsLiked(0);
                notifyDataSetChanged();
            }
        }
    });

试试这个在onClick函数上调用此函数

public void foo(int position) {
        data.remove(position);
        notifyItemRemoved(position);
        notifyItemRangeChanged(position, list.size());
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM