2017-04-05 22 views
0

ちょっとちょっと私は、cardviewのいくつかのデータのリストを取り込むrecyclerviewアダプタを持っています。私は、実際にはrecyclerviewからカード行を削除し、行データを格納するsqliteデータベースから項目を削除するカードレイアウトの右下に3ドットのメニューを作成しました。問題は、削除を実装するメソッドを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

あなたは、私が削除画像かそこらで3つのドットのメニューを置き換える必要が婉曲しているが、私はatually場合R.id.action_delete_beneficiaryとonMenuItemClickメソッド内削除統合したい:包括的」のトーストメッセージで受益者が削除されました。 – Delaroy

+0

これを私のコードに置き換えてください。Toast.makeText(mContext、 "受取人を削除しています"、Toast.LENGTH_SHORT).show(); –

関連する問題