热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何以编程方式删除RecyclerView中的行

如何解决《如何以编程方式删除RecyclerView中的行》经验,为你挑选了1个好方法。

嘿家伙我有一个recyclerview适配器,它填充了cardview上的一些数据列表.我在卡片布局的右下角创建了一个三点菜单,它实际上会从recyclerview中删除卡片行,并且还会从存储行数据的sqlite数据库中删除该项目.问题是我无法弄清楚如何将实现删除的方法集成到recyclerview ViewHolder中.这是源代码

public class BeneficiaryRecyclerAdapter extends RecyclerView.Adapter {

private List listBeneficiary;
public ImageView overflow;
private Context mContext;

public BeneficiaryRecyclerAdapter(){

}


public BeneficiaryRecyclerAdapter(List listBeneficiary, Context mContext) {
    this.listBeneficiary = listBeneficiary;
    this.mCOntext= mContext;

}


@Override
public BeneficiaryViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    // inflating recycler item view
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.item_beneficiary_recycler, parent, false);

    return new BeneficiaryViewHolder(itemView);
}

@Override
public void onBindViewHolder(final BeneficiaryViewHolder holder, int position) {
    holder.textViewName.setText(listBeneficiary.get(position).getName());
    holder.textViewEmail.setText(listBeneficiary.get(position).getEmail());
    holder.textViewAddress.setText(listBeneficiary.get(position).getAddress());
    holder.textViewCountry.setText(listBeneficiary.get(position).getAddress());

    holder.overflow.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            showPopupMenu(holder.overflow);
        }
    });
}

/**
 * Showing popup menu when tapping on 3 dots
 */
private void showPopupMenu(View view) {
    // inflate menu
    PopupMenu popup = new PopupMenu(this.mContext, view);
    MenuInflater inflater = popup.getMenuInflater();
    inflater.inflate(R.menu.beneficiary_m, popup.getMenu());
    popup.setOnMenuItemClickListener(new MyMenuItemClickListener());
    popup.show();
}


//NOTE: The method that would delete the item from the database and recyclerview but i need this method to be called from the onMenuItemClick of the case with id of case R.id.action_delete_beneficiary

public void deleteItem(final BeneficiaryViewHolder holder, int position) {
    final DatabaseHelper2 db = new DatabaseHelper2(mContext);
    db.open();
    db.deleteContact(position);
    db.close();
    listBeneficiary.remove(position);
    notifyItemRemoved(position);
    notifyItemRangeChanged(position, listBeneficiary.size());
    holder.itemView.setVisibility(View.GONE);
}



/**
 * Click listener for popup menu items
 */
class MyMenuItemClickListener implements PopupMenu.OnMenuItemClickListener {


    public MyMenuItemClickListener() {
    }

    @Override
    public boolean onMenuItemClick(MenuItem menuItem) {

        switch (menuItem.getItemId()) {
            case R.id.action_delete_beneficiary:
                Toast.makeText(mContext, "deleting beneficiary", Toast.LENGTH_SHORT).show();
                return true;
            case R.id.action_edit_beneficiary:
                Toast.makeText(mContext, "editing beneficiary", Toast.LENGTH_SHORT).show();
                return true;
            default:
        }
        return false;
    }


}


@Override
public int getItemCount() {
    Log.v(BeneficiaryRecyclerAdapter.class.getSimpleName(),""+listBeneficiary.size());
    return listBeneficiary.size();
}


/**
 * ViewHolder class
 */
public class BeneficiaryViewHolder extends RecyclerView.ViewHolder {

    public AppCompatTextView textViewName;
    public AppCompatTextView textViewEmail;
    public AppCompatTextView textViewAddress;
    public AppCompatTextView textViewCountry;
    public  ImageView overflow;

    public BeneficiaryViewHolder(View view) {
        super(view);
        textViewName = (AppCompatTextView) view.findViewById(R.id.textViewName);
        textViewEmail = (AppCompatTextView) view.findViewById(R.id.textViewEmail);
        textViewAddress = (AppCompatTextView) view.findViewById(R.id.textViewAddress);
        textViewCountry = (AppCompatTextView) view.findViewById(R.id.textViewCountry);
        overflow = (ImageView) view.findViewById(R.id.overflow);
    }
}


}

如果有人可以帮助我,我会很高兴.



1> 小智..:

使用此代码删除同一行单击按钮上的recyclerview项目.

 holder.deleteImg.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(list.size()!=0){
                list.remove(position);
                notifyItemRemoved(position);
                notifyItemRangeChanged(position,list.size());
            }

         }
    });


推荐阅读
author-avatar
山间农夫的家
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有