Лучше использовать PopUpMenu для каждого элемента в списке. Иметь ImageView
вместо Spinner
, который будет отображать значок «3 точки». Когда кто-то нажимает на точки, PopUpMenu ... всплывает!
По шагам:
1) Замените Spinner
в макете XML на ImageView
, который будет отображать значок из трех точек.
2) Определите класс слушателя внутри вашего RecyclerView.Adapter<SalesViewHolder>
и сохраните экземпляр там.
3) Внутри SalesViewHolder
установите OnClickListener
, чтобы реагировать на щелчки.
4) Всплыть из действия.
Ваш новый адаптер должен выглядеть примерно так
class SalesAdapter extends RecyclerView.Adapter<SalesViewHolder>{
public interface OnMenuItemClickListener{
void onMenuItemClicked(ImageView view);
}
private OnMenuItemClickListener listener;
public void setOnMenuItemClickListener(OnMenuItemClickListener listener){
this.listener = listener;
}
public static class SalesViewHolder extends RecyclerView.ViewHolder {
public LinearLayout overflowLayout;
public ImageView menu;
public SalesViewHolder(View itemView, Context context) {
super(itemView);
overflowLayout = (LinearLayout) itemView.findViewById(R.id.list_item_overflow_layout);
menu= (ImageView) itemView.findViewById(R.id.imageview_id);
// Make sure to enable lambdas
menu.setOnClickListener( (view) -> {
if( listener != null ){
listener.onMenuItemClicked(view);
}
}
}
}
}
Ваша деятельность должна реализовывать OnMenuItemClickListener и может выглядеть примерно так
class YourActivity extends Activity implements SalesAdapter.OnMenuItemClickListener{
// Don't forget to set the listener to the adapter, let's suppose that happens in onCreate()
@Override
public void onCreate(Bundle arg){
SalesAdapter adapter = new SalesAdapter();
adapter.setOnMenuItemClickListener(this);
}
@Override
public void onMenuItemClicked(ImageView menu){
showPopUp(menu);
}
private void showPopup(View v) {
PopupMenu popup = new PopupMenu(this, v);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.actions, popup.getMenu());
popup.show();
}
}
Не забудьте указать действия в меню и т. Д. ... как уже упоминалось здесь .