有什么方法可以在 Recycler 视图中使用的 Card 视图上实现保持侦听器?
Is there any way to achieve a hold listener on a Card view which is used in a Recycler view?
我正在尝试实现一个选项菜单,如果用户按住卡片视图或按下设置按钮,该菜单将悬停在卡片视图上。我尝试实现的菜单应该如下所示:
我已经设置好了,回收站视图的适配器,按下设置按钮会打开弹出窗口,这会打开一个带有选项的小弹出窗口。但是,我正在努力实现它更像是附加到卡片视图,而不是带有选择的新 window。
@Override
public void onBindViewHolder(NotesHolder holder, int position) {
if (!mCursor.moveToPosition(position)) {
return;
}
String noteT = mCursor.getString(mCursor.getColumnIndex(NotesDbAdapter.COL_TITLE));
String noteC = mCursor.getString(mCursor.getColumnIndex(NotesDbAdapter.COL_CONTENT));
holder.noteTitle.setText(noteT);
holder.noteDescription.setText(noteC);
holder.cardView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
return false;
}
});
holder.noteCard_settingsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(mCtx,"The position is:"+position,Toast.LENGTH_SHORT).show();
PopupMenu popup = new PopupMenu(mCtx, view);
MenuInflater inflater = popup.getMenuInflater();
NotesDbAdapter mDbAdapter;
mDbAdapter = new NotesDbAdapter(mCtx);
mDbAdapter.open();
inflater.inflate(R.menu.menu_popup, popup.getMenu());
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.popup_edit:
Toast.makeText(mCtx,"You pressed edit note", Toast.LENGTH_SHORT).show();
return true;
case R.id.popup_delete:
mDbAdapter.deleteNoteById(position+1);
notifyDataSetChanged();
Toast.makeText(mCtx,"You pressed delete note", Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
});
popup.show();
}
});
public class NotesHolder extends RecyclerView.ViewHolder{
public TextView noteTitle;
public TextView noteDescription;
public CardView cardView;
public Button noteCard_settingsButton;
public NotesHolder(View view) {
super(view);
noteTitle = view.findViewById(R.id.note_titleView);
noteDescription = view.findViewById(R.id.note_contentView);
cardView = view.findViewById(R.id.notes_cardView);
noteCard_settingsButton = view.findViewById(R.id.note_card_settings_button);
}
}
这段代码有效,请不要误会我的意思,但我只是想知道是否有办法实现与我所附图像类似的东西。
按照我的方式应该相当简单。
默认情况下,只需将自定义选项视图隐藏在 cardview 项目的顶部。
并在卡片视图上长按时显示选项视图。
为什么过于复杂?
请注意我说的是自定义选项视图。
意思是,不是膨胀菜单,而是把它放在 XML 里面。
希望它在某种程度上有所帮助。
干杯!
我正在尝试实现一个选项菜单,如果用户按住卡片视图或按下设置按钮,该菜单将悬停在卡片视图上。我尝试实现的菜单应该如下所示:
我已经设置好了,回收站视图的适配器,按下设置按钮会打开弹出窗口,这会打开一个带有选项的小弹出窗口。但是,我正在努力实现它更像是附加到卡片视图,而不是带有选择的新 window。
@Override
public void onBindViewHolder(NotesHolder holder, int position) {
if (!mCursor.moveToPosition(position)) {
return;
}
String noteT = mCursor.getString(mCursor.getColumnIndex(NotesDbAdapter.COL_TITLE));
String noteC = mCursor.getString(mCursor.getColumnIndex(NotesDbAdapter.COL_CONTENT));
holder.noteTitle.setText(noteT);
holder.noteDescription.setText(noteC);
holder.cardView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
return false;
}
});
holder.noteCard_settingsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(mCtx,"The position is:"+position,Toast.LENGTH_SHORT).show();
PopupMenu popup = new PopupMenu(mCtx, view);
MenuInflater inflater = popup.getMenuInflater();
NotesDbAdapter mDbAdapter;
mDbAdapter = new NotesDbAdapter(mCtx);
mDbAdapter.open();
inflater.inflate(R.menu.menu_popup, popup.getMenu());
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.popup_edit:
Toast.makeText(mCtx,"You pressed edit note", Toast.LENGTH_SHORT).show();
return true;
case R.id.popup_delete:
mDbAdapter.deleteNoteById(position+1);
notifyDataSetChanged();
Toast.makeText(mCtx,"You pressed delete note", Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
});
popup.show();
}
});
public class NotesHolder extends RecyclerView.ViewHolder{
public TextView noteTitle;
public TextView noteDescription;
public CardView cardView;
public Button noteCard_settingsButton;
public NotesHolder(View view) {
super(view);
noteTitle = view.findViewById(R.id.note_titleView);
noteDescription = view.findViewById(R.id.note_contentView);
cardView = view.findViewById(R.id.notes_cardView);
noteCard_settingsButton = view.findViewById(R.id.note_card_settings_button);
}
}
这段代码有效,请不要误会我的意思,但我只是想知道是否有办法实现与我所附图像类似的东西。
按照我的方式应该相当简单。
默认情况下,只需将自定义选项视图隐藏在 cardview 项目的顶部。 并在卡片视图上长按时显示选项视图。
为什么过于复杂?
请注意我说的是自定义选项视图。 意思是,不是膨胀菜单,而是把它放在 XML 里面。 希望它在某种程度上有所帮助。 干杯!