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