좋아, 그래서 (놀랍게도) 나는 여기에 내 자신의 질문에 대답했다. PopupMenu
를 사용 onMenuItemClicked
내에 RecylcerView
어댑터의 위치를 얻기 위해
, 난 PopupMenu
의 정의 구현을 만들었다.
displaying icons in your menus과 같이 PopupMenu
을 사용할 때 유연성이 훨씬 뛰어납니다.
PopupMenu
에 대한 Google의 소스 코드를보고 정확히 동일한 MyPopupMenu
과 같이 자신 만의 클래스를 만들 수도 있지만 클래스가 수행 할 수있는 특정 인스턴스를 수정할 수 있습니다.
내 문제를 완료하려면 RecyclerView.Adapter
에있는 자세히 단추에 OnClickListener
을 추가했습니다. 이 버튼을 클릭하면 단추보기와 어댑터의 현재 위치를 모두 통과하는 인터페이스 메서드가 호출됩니다.
MyPopupMenu
의 사용자 지정 구현에서 int 값에 대한 각 생성자의 변수 요구 사항을 추가하십시오. 또한 int position
을 onMenuItemClick(MenuItem item, int position)
MyPopupMenu
내의 인터페이스 방법에 추가하십시오.
마지막으로 활동 클래스에서 어셈블하십시오.
public class MyActivity extends AppCompatActivity implements MyAdapter.OnItemEventListener, PopupMenu.OnMenuItemClickListener {
@Override
public void onMoreClicked(View v, int position) {
MyPopupMenu popupMenu = new MyPopupMenu(this, v, position);
MenuInflater inflater = popupMenu.getMenuInflater();
inflater.inflate(R.menu.edit_delete_menu, popupMenu.getMenu());
popupMenu.setOnMenuItemClickListener(this);
popupMenu.show();
}
@Override
public boolean onMenuItemClick(MenuItem item, int position) {
switch (item.getItemId()) {
case R.id.edit:
//Do position specific action with int position
break;
case R.id.delete:
//Do position specific action with int position
break;
}
return false;
}
}
class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private final OnItemEventListener onItemEventListener;
static class ViewHolder extends RecyclerView.ViewHolder {
ImageButton more;
ViewHolder(View v) {
super(v);
more = (ImageButton) v.findViewById(R.id.list_item_more_button);
}
}
public NewGameAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false);
final ViewHolder viewHolder = new ViewHolder(v);
viewHolder.more.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onItemEventListener.onMoreClicked(viewHolder.more, viewHolder.getAdapterPosition());
}
});
return viewHolder;
}
interface OnItemEventListener {
void onMoreClicked(View v, int position);
}
}
여러분의 생각을 알려주세요.