Fragment中RecyclerView无法加载显示数据库存储的列表数据问题求助
问题排查及解决方案
核心错误(直接导致列表不显示)
你的ActivityAdapter中getItemCount方法固定返回0,RecyclerView会判定列表没有数据项,不会执行任何渲染逻辑:
@Override public int getItemCount() { return 0; }
修改方案
修改为返回实际列表长度:
@Override public int getItemCount() { // 二选一即可,两个列表长度始终一致 return activityName == null ? 0 : activityName.size(); // 或 return activityTime == null ? 0 : activityTime.size(); }
其他影响功能的问题
新增数据后列表不刷新
Fragment的onCreateView仅在视图首次创建时执行一次,你从AddActivity新增数据返回Fragment时,不会重新读取数据库刷新列表。修改方案
在
ActivityLogSection中新增onResume生命周期方法,每次页面可见时重新加载数据并刷新适配器:@Override public void onResume() { super.onResume(); // 先清空旧数据 activityName.clear(); activityTime.clear(); // 重新读取数据库 storeActivityDataInArray(); // 通知适配器数据变更 if (activityAdapter != null) { activityAdapter.notifyDataSetChanged(); } }添加数据后未返回原页面
AddActivity中点击添加按钮存储数据后,没有关闭当前页,会一直停留在添加页面。修改方案
在
addBtn的点击事件末尾添加finish():addBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DBHelper dbHelper = new DBHelper(AddActivity.this); String activityName = etActivityName.getText().toString().trim(); String activityTime = simpleDateFormat.format(calendar.getTime()); dbHelper.addActivity(activityName, activityTime); // 新增此行,关闭添加页回到Fragment finish(); } });日期格式错误
你使用的日期格式符yyyy-mm-dd HH:mm中小写mm代表分钟,大写MM才代表月份,会导致月份位置显示的是分钟值。修改方案
把所有用到该格式的地方统一修改为:
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");类型安全隐患
ActivityAdapter中的ArrayList未指定泛型,属于裸类型,容易引发类型转换异常。修改方案
修改属性定义和构造方法参数:
// 修改属性定义 private ArrayList<String> activityName, activityTime; // 修改构造方法 public ActivityAdapter(Context context, ArrayList<String> activityName, ArrayList<String> activityTime) { this.context = context; this.activityName = activityName; this.activityTime = activityTime; }
内容的提问来源于stack exchange,提问作者Animish
相关产品推荐
相关产品推荐

