适配器代码
public class ButtonGroupAdp extends RecyclerView.Adapter<ButtonGroupAdp.MyViewHolder> {
List<ButtonGroup> mList;
private ItemClickListener mClickListener;
Context context;
private int screenWidth;
public ButtonGroupAdp(List<ButtonGroup> mList, Context context) {
this.mList = mList;
this.context = context;
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
Point size = new Point();
display.getSize(size);
screenWidth = size.x;
}
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView txtTitle;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
txtTitle = itemView.findViewById(R.id.tv_name);
}
@Override
public void onClick(View view) {
if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition());
}
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(context);
View view = layoutInflater.inflate(R.layout.list_groupname, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
ButtonGroup datum = mList.get(position);
holder.txtTitle.setText("" + datum.getGroupName());
datum.notifyAll();
}
public interface ItemClickListener {
void onItemClick(View view, int position);
}
@Override
public int getItemCount() {
return mList.size();
}
}
这是我的主要活动代码
badp = new ButtonGroupAdp(mlist, this);
mlist = new ArrayList<>();
mlist = mobexInAppDb.getAllProductList(site);
myRecyclerView.setAdapter(badp);
这是m从sqlite获取值的地方
public List<ButtonGroup> getAllProductList(String siteCode) {
List<ButtonGroup> buttonGroups = new ArrayList<>();
Cursor cursor = null;
SQLiteDatabase db = this.getWritableDatabase();
cursor = db.rawQuery("SELECT DISTINCT groupName,groupId FROM ButtonGroups where parentGroupId='"+null+"' and siteCode='"+siteCode+"'", null);
if (cursor.getCount() != 0) {
while (cursor.moveToNext()) {
ButtonGroup buttonGroup = new ButtonGroup(cursor.getString(0),cursor.getString(1));
buttonGroups.add(buttonGroup);
}
}
cursor.close();
return buttonGroups;
}
基本上,我想将此数据放入水平的回收站视图中,并且在触摸每一项时,我应该了解单击哪一项,但不知道为什么m会遇到此错误,请帮我 这是错误正在得到
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.mobex.inapp, PID: 17931
java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference
at com.mobex.inapp.Adapter.ButtonGroupAdp.getItemCount(ButtonGroupAdp.java:81)
at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep1(RecyclerView.java:4044)
at androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3534)
答案 0 :(得分:1)
您的mlist
是null
您首先需要初始化mlist
,然后像下面的代码一样将其传递到ButtonGroupAdp
适配器中
示例代码
mlist = new ArrayList<>();
badp = new ButtonGroupAdp(mlist, this);
mlist = mobexInAppDb.getAllProductList(site);
myRecyclerView.setAdapter(badp);
更新
在ArrayList中添加数据之后,您需要notify
适配器
mlist = new ArrayList<>();
adp = new ButtonGroupAdp(mlist, this);
myRecyclerView.setAdapter(badp);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mlist = mobexInAppDb.getAllProductList(site);
adp.notifyDataSetChanged();
答案 1 :(得分:0)
您必须先初始化mList,然后再将其传递给ButtonGroupAdp
这应该解决它。
只需更换
List<ButtonGroup> mList;
使用
List<ButtonGroup> mList = new ArrayList<>();
更新
更改此
badp = new ButtonGroupAdp(mlist, this);
mlist = new ArrayList<>();
mlist = mobexInAppDb.getAllProductList(site);
myRecyclerView.setAdapter(badp);
收件人
mlist = new ArrayList<>();
badp = new ButtonGroupAdp(mlist, this);
myRecyclerView.setAdapter(badp);
myRecyclerView.setLayoutManager(new LinearLayoutManager(this,
LinearLayoutManager.HORIZONTAL, true));
mlist = mobexInAppDb.getAllProductList(site);
badp.notifyDataSetChanged();