2017-04-05 52 views
0

嘿,我有一個recyclerview適配器,可以填充cardview上的一些數據列表。我在卡布局的右下角創建了一個三點菜單,它將實際上從recyclerview中刪除卡行,並從存儲行數據的sqlite數據庫中刪除該項目。問題是我無法弄清楚如何將實現刪除的方法集成到recyclerview ViewHolder中。這裏是源代碼如何以編程方式刪除RecyclerView中的一行

public class BeneficiaryRecyclerAdapter extends RecyclerView.Adapter<BeneficiaryRecyclerAdapter.BeneficiaryViewHolder> { 

private List<Beneficiary> listBeneficiary; 
public ImageView overflow; 
private Context mContext; 

public BeneficiaryRecyclerAdapter(){ 

} 


public BeneficiaryRecyclerAdapter(List<Beneficiary> 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); 
    } 
} 


} 

如果有人能幫助我,我會很高興。

回答

4

使用此代碼可刪除同一行上的recyclerview項目單擊按鈕。

​​
+0

你是影射我應該刪除圖像左右更換三個點菜單,但我atually要集成的onMenuItemClick方法與案例R.id.action_delete_beneficiary內刪除:包括性與「敬酒消息受益人刪除「 – Delaroy

+0

用我的代碼替換此Toast.makeText(mContext,」刪除受益人「,Toast.LENGTH_SHORT).show(); –

相關問題