2016-10-28 33 views
0

我正在處理回收站。 這是我的適配器類:從ViewHolder訪問菜單項 - android

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); 
      } 
     }); 
    } 
} 

}

這裏,點擊監聽器工作正常。 並長按也。我能夠獲得點擊和長時間點擊的項目位置。 但現在我想訪問這個類的菜單項。 長按監聽器方法。我想寫代碼,要訪問菜單項,該項的ID是R.id.delete。

長按我想設置該項目可見。 但是。

delete.setVisible(true); 

給我null對象引用錯誤。 有什麼想法?或建議?

回答

1

在你Activity類寫入該代碼,

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; 
} 

在適配器LongClick方法調用使用getMenu()方法。如下所示。

@Override 
     public boolean onLongClick(View view) { 
      Menu menu = MainActivity.getThis().getMenu(); 
      menu.findItem(R.d.Delete).setVisible(true); 
      return true; 
     } 
+0

什麼是獲得OS 3.0()?其顯示錯誤。無法解決getThis。你會PLZ解釋 –

+0

@Mangesh,thanx,你的代碼幫我做了一些改動 –

+0

好的然後接受我的答案。 getThis()是MainActivity對象的靜態方法。如果使用getMenu()作爲靜態菜單,它有時會產生問題。 –

0

在活動類:

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

public static Menu getMenu() 
{ 
    return mMenu; 
} 

在適配器LongClick方法

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