ポップアップメニューを押したときに現在のrecyclerviewアイテムの位置を取得することはできませんが、それはできません。ポップアップメニューのリサイクルビューメソッドonBindViewHolder
holder.buttonViewOption.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//creating a popup menu
PopupMenu popup = new PopupMenu(mCtx, holder.buttonViewOption);
//inflating menu from xml resource
popup.inflate(R.menu.options_menu);
//adding click listener
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu1:
MyLis item =list.get(onBindViewHolder(getItemViewType(position)));
Intent i = new Intent(mCtx, NewClass.class);
i.putExtra("name",item .getName());
mContext.startActivity(i);
break;
case R.id.menu2:
//handle menu2 click
break;
case R.id.menu3:
//handle menu3 click
break;
}
return false;
}
});
//displaying the popup
popup.show();
}
});
コード全体CustomAdapter.javaです:
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
private List<MyList> list;
private Context mCtx;
public CustomAdapter(List<MyList> list, Context mCtx) {
this.list = list;
this.mCtx = mCtx;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_items, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(final CustomAdapter.ViewHolder holder, int position) {
MyList myList = list.get(position);
holder.textViewHead.setText(myList.getHead());
holder.textViewDesc.setText(myList.getDesc());
holder.buttonViewOption.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//creating a popup menu
PopupMenu popup = new PopupMenu(mCtx, holder.buttonViewOption);
//inflating menu from xml resource
popup.inflate(R.menu.options_menu);
//adding click listener
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu1:
MyLis item =list.get(onBindViewHolder(getItemViewType(position)));
Intent i = new Intent(mCtx, NewClass.class);
i.putExtra("name",item .getName());
mContext.startActivity(i);
break;
case R.id.menu2:
//handle menu2 click
break;
case R.id.menu3:
//handle menu3 click
break;
}
return false;
}
});
//displaying the popup
popup.show();
}
});
}
MyList item = list.get(position);あなたはこれを試しましたか? –
@Rajeshはい、 'positon'はエラーをマークします。原因はこのポップアップメニューのメソッドではなくonBindViewHolderメソッド – user3518835
で' View.OnClickListener'をあなたの 'RecyclerView.ViewHolder'に実装しています(クラスFooはRecyclerView.ViewHolderを継承しています)。 .OnClickListene {...) – pskink