, , View , . , , , , . , - , .
. ContextMenuHandler - , . ViewHolder,
public interface ContextMenuHandler extends View.OnCreateContextMenuListener { boolean onContextItemSelected(MenuItem item); }
, , RecyclerView.
public interface ViewWithContextMenu { public void setContextMenuHandler(FragmentWithContextMenu fragment, ContextMenuHandler handler); public ContextMenuHandler getContextMenuHandler(); }
, , RecylcerView, ViewWIthContextMenu. LinearLayout.
public class LinearLayoutWithContextMenu extends LinearLayout implements ViewWithContextMenu { public LinearLayoutWithContextMenu(Context context) { super(context); } public LinearLayoutWithContextMenu(Context context, AttributeSet attrs) { super(context, attrs); } private ContextMenuHandler handler; @Override public void setContextMenuHandler(FragmentWithContextMenu fragment, ContextMenuHandler handler) { this.handler = handler; setOnCreateContextMenuListener(fragment); } @Override public ContextMenuHandler getContextMenuHandler() { return handler; } }
, , Fragment, .
public class FragmentWithContextMenu extends Fragment { ContextMenuHandler handler = null; @Override public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, view, menuInfo); handler = null; if (view instanceof ViewWithContextMenu) { handler = ((ViewWithContextMenu)view).getContextMenuHandler(); if (handler != null) handler.onCreateContextMenu(menu, view, menuInfo); } } @Override public boolean onContextItemSelected(MenuItem item) { if (handler != null) { if (handler.onContextItemSelected(item)) return true; } return super.onContextItemSelected(item); } }
. FragmentWithContextMenu. RecylerWindow Adapter. Adapter :
public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> { private final FragmentWithContextMenu fragment; Adapter(FragmentWithContextMenu fragment) { this.fragment = fragment; } @Override public Adapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context) .inflate(R.layout.child_view, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(final Adapter.ViewHolder holder, int position) {
. , . contextmenu, , , , , .