从ViewHolder访问菜单项-android

从ViewHolder访问菜单项-android,android,menu,android-viewholder,Android,Menu,Android Viewholder,我在做回收工。 这是我的适配器类: public class NotesAdapter extends RecyclerView.Adapter<NotesAdapter.ViewHolder> { private static List<Notes> mNotes; private Context mContext; public NotesAdapter(Context context, List<Notes> notes) { mNotes =

我在做回收工。 这是我的适配器类:

public class NotesAdapter extends RecyclerView.Adapter<NotesAdapter.ViewHolder> {

private static List<Notes> mNotes;
private Context mContext;
public NotesAdapter(Context context, List<Notes> notes) {
    mNotes = notes;
    mContext = context;
}

// Usually involves inflating a layout from XML and returning the holder
@Override
public NotesAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, final int viewType) {
    Context context = parent.getContext();
    LayoutInflater inflater = LayoutInflater.from(context);

    // Inflate the custom layout
    View notesView = inflater.inflate(R.layout.items_notes, parent, false);

    // Return a new holder instance
    final ViewHolder viewHolder = new ViewHolder(notesView);
    notesView.setLongClickable(true);
    notesView.setClickable(true);

    return viewHolder;
}

// Easy access to the context object in the recyclerview
private Context getContext() {
    return mContext;
}

@Override
public void onBindViewHolder(NotesAdapter.ViewHolder viewHolder, final int position) {

    // Get the data model based on position
    Notes notes = mNotes.get(position);
    viewHolder.itemView.setSelected(mNotes.contains(position));

    // Set item views based on your views and data model
    TextView textView = viewHolder.preTitle;
    textView.setText(notes.getTitle());
    TextView textView1 = viewHolder.preText;
    textView1.setText(notes.getText());
    String color=notes.getColor();

    CardView preCard=viewHolder.preCard;
    preCard.setBackgroundColor(Color.parseColor(color));
    ImageView img = viewHolder.preImage;
    img.setVisibility(View.GONE);


}

// Returns the total count of items in the list
@Override
public int getItemCount() {
    return mNotes.size();
}

   public static class ViewHolder extends RecyclerView.ViewHolder {
    public RobotoTextView preTitle, preText;
    public ImageView preImage;
    public CardView preCard;
    public MenuItem delete;

        public ViewHolder(final View itemView) {
        super(itemView);
        itemView.setClickable(true);

        preTitle = (RobotoTextView) itemView.findViewById(R.id.preTitle);
        preText = (RobotoTextView) itemView.findViewById(R.id.preText);
        preImage=(ImageView) itemView.findViewById(R.id.preImage);
        preCard=(CardView) itemView.findViewById(R.id.preCard);
        delete=(MenuItem) itemView.findViewById(R.id.delete);



        itemView.setOnLongClickListener(new View.OnLongClickListener() {
            int selected=0;
            @Override
            public boolean onLongClick(View view) {
                int p=getLayoutPosition();
                System.out.println("LongClick: "+p);
                 return true;
            }
        });

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int p=getLayoutPosition();

               Notes notes = mNotes.get(p);

                Intent intent = new Intent(view.getContext(),EditNote.class);

                Bundle bundle = new Bundle();
                bundle.putSerializable("DATA",notes);
                intent.putExtras(bundle);
                itemView.getContext().startActivity(intent);

               // Toast.makeText(getContext(), "Recycle Click" + mNotes.get(viewHolder.getPosition())+"  ", Toast.LENGTH_SHORT).show();
                System.out.println("Click: "+p);
            }
        });
    }
}
给我空对象引用错误。
有什么想法吗?还是建议?

在活动课上编写以下代码

 private Menu mMenu = null;
@Override
public boolean onPrepareOptionsMenu(Menu menu)
{
    mMenu = menu;
    return super.onPrepareOptionsMenu(menu);
}

public Menu getMenu()
{
    return mMenu;
}

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
     mThis = this;
 }

private static MainActivity mThis = null;
public MainActivity getThis()
{ 
  return mThis;
 }
在Adapter LongClick方法中调用getMenu()方法。如下图所示

@Override
        public boolean onLongClick(View view) {
            Menu menu = MainActivity.getThis().getMenu();
            menu.findItem(R.d.Delete).setVisible(true);
             return true;
        }
在活动课上:

private static Menu mMenu = null;
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    mMenu = menu;
    return super.onPrepareOptionsMenu(menu);
}

public static Menu getMenu()
{
    return mMenu;
}  
在适配器中使用长单击方法

    @Override
      public boolean onLongClick(View view) {
            Menu menu =MainActivity.getMenu();
            menu.findItem(R.id.delete).setVisible(true);
            return true;
      }

这是什么?这是一个显示错误。无法解决此问题。你愿意吗explain@Mangesh,thanx,您的代码在做了一些更改后帮助了我,请接受我的答案。getThis()是MainActivity对象的静态方法。如果使用getMenu()作为静态菜单,有时会产生问题。现在我更新了代码。如果我的回答真的对你有帮助,那就接受并投票吧。
    @Override
      public boolean onLongClick(View view) {
            Menu menu =MainActivity.getMenu();
            menu.findItem(R.id.delete).setVisible(true);
            return true;
      }