我工作的一个RecylcerView
和CardView
。卡中包含ImageView。我也有一个声明为动作的菜单项,其标题设置为0。我要实现的是,当我单击图像时,其位置应添加到数组中,菜单项的标题应添加到数组中是数组的大小。
以下是我的menu.xml代码:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity">
...
<item
android:id="@+id/action_down_list"
android:title="@string/action_down_list"
android:orderInCategory="100"
app:showAsAction="withText|always"
android:icon="@drawable/ic_action_download" />
</menu>
下面是运行onClickListner
代码的Adapter类代码:
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
List<String> abc = new ArrayList<String>();
...
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
...
viewHolder.imgView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
String img_id = images.get(viewHolder.getAdapterPosition());
MenuItem dl_menu = (MenuItem) view.findViewById(R.id.action_down_list);
abc.add(img_id);
dl_menu.setTitle(Integer.toString(abc.size()));
return true;
}
});
}
}
但是,当我运行我的程序时,它给出一个java.lang.NullPointerException
。我有不同的方法,但仍然没有解决方案。
问题出在这一行。
MenuItem dl_menu = (MenuItem) view.findViewById(R.id.action_down_list);
您试图在视图中找到一个没有菜单项的菜单。没有简单的方法可以从适配器访问菜单。
在这种情况下,最简单的方法是在适配器中创建菜单的设置方法,
public void setMenu(Menu menu){
this.menu = menu;
}
并在onCreateOptionsMenu
回调中为适配器调用它,请确保适配器在初始化之前已初始化。之后,您可以编写:
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
List<String> abc = new ArrayList<String>();
Menu menu;
...
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
...
viewHolder.imgView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
String img_id = images.get(viewHolder.getAdapterPosition());
MenuItem dl_menu = menu.findItem(R.id.action_down_list);
abc.add(img_id);
dl_menu.setTitle(Integer.toString(abc.size()));
return true;
}
});
但是从我的角度来看,一种首选的方式是使用诸如LocalBroadcastManager之类的工具向Activity或Fragment发送一个包含信息的意图,该意图应该通过菜单项来完成。因此,适配器将无法直接访问菜单。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句