2016-09-20 6 views
4

Как я могу создать контекстное меню внутри RecyclerViewAdapter, когда представление установлено onLongClickListener?Как иметь ContextMenu, когда элемент recyclerview установлен onLongClickListener

Вот мой код:

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

      public TextView name; 

      public ViewHolder(View itemLayoutView) { 

       super(itemLayoutView); 
       name = (TextView) itemLayoutView.findViewById(R.id.rvname); 

       itemLayoutView.setOnClickListener(this); 
       itemLayoutView.setOnLongClickListener(new View.OnLongClickListener() { 
        @Override 
        public boolean onLongClick(View v) { 
         return false; 
        } 

       }); 
      } 

Вот пример изображения, что я хочу достичь

enter image description here

ответ

3

Основываясь на моем опыте, мне не нужно setOnLongClickListener, чтобы сделать контекстное меню, View.OnCreateContextMenuListener сделает это для меня.

Вот мой рабочий код:

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnCreateContextMenuListener { 

    public TextView name; 

    public ViewHolder(View itemLayoutView) { 
     super(itemLayoutView); 
     name = (TextView) itemLayoutView.findViewById(R.id.rvname); 
     itemLayoutView.setOnClickListener(this); 
     itemLayoutView.setOnCreateContextMenuListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     String location = name.getText().toString(); 
     Intent goFlip = new Intent(RecyclerAdapter.context, FlipActivity.class); 
     Bundle bundle = new Bundle(); 
     bundle.putString("name", location); 
     bundle.putInt("pos", getAdapterPosition()); 
     goFlip.putExtras(bundle); 
     context.startActivity(goFlip); 
    } 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { 
     menu.setHeaderTitle("Select Action"); 
     MenuItem edit = menu.add(Menu.NONE,1,1,"Edit"); 
     MenuItem delete = menu.add(Menu.NONE,2,2,"Delete"); 


     edit.setOnMenuItemClickListener(onChange); 
     delete.setOnMenuItemClickListener(onChange); 
    } 
    private final MenuItem.OnMenuItemClickListener onChange = new MenuItem.OnMenuItemClickListener() { 
     @Override 
     public boolean onMenuItemClick(MenuItem item) { 
      switch (item.getItemId()){ 
       case 1: 
        Toast.makeText(context,"Edit",Toast.LENGTH_LONG).show(); 
        return true; 
       case 2: 
        Toast.makeText(context,"Delete",Toast.LENGTH_LONG).show(); 
        return true; 
      } 
      return false; 
     } 
    }; 
} 

Я также хочу поделиться ссылкой, которую я нашел, чтобы сделать эту работу: https://gist.github.com/gauravat16/e8e03496a4056829e65dede3c236da28

+0

Именно то, что я искал. Огромное спасибо. –