如何使用光标和循环显示来自 sqlite 的片段的 recyclerview
Posted
技术标签:
【中文标题】如何使用光标和循环显示来自 sqlite 的片段的 recyclerview【英文标题】:How to show a recyclerview on fragment from sqlite using cursor and looping 【发布时间】:2019-05-23 22:43:35 【问题描述】:我在回收站视图中添加了一个数据,光标位于视图寻呼机的片段上,但回收站视图项目未显示。我使用循环从 sqlite 获取数据。
我尝试使用 for 和 while for 循环,但 recyclerview 仍然没有显示。我认为可能是sqlite中不存在数据,但检查后数据存在。
private void prepareNamaNilaiData(String kelas, String mapel)
Cursor c = MainActivity.myClass.lihatNamaNilai(kelas, mapel, "Pengetahuan");
NamaNilai namaNilai[] = new NamaNilai[c.getCount()];
int i = 0;
c.moveToFirst();
if (c.getCount() != 0)
while (!c.isAfterLast())
//showMessage("BELUM ADA DATA", "Belum ada nilai pengetahuan "+ c.getString(0) + " pada kelas "+ c.getString(1));
namaNilai[i] = new NamaNilai(c.getString(0), c.getString(1));
namaNilaiList.add(namaNilai[i]);
i++;
c.moveToNext();
namaNilaiAdapter.notifyDataSetChanged();
return;
else
showMessage("BELUM ADA DATA", "Belum ada nilai pengetahuan " + mapel + " pada kelas " + kelas);
这是我调用 prepareNamaNilaiData 方法时的代码
RecyclerView recyclerView = rootView.findViewById(R.id.rvNamaPengetahuan);
namaNilaiAdapter = new NamaNilaiAdapter(namaNilaiList);
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity().getApplicationContext());
recyclerView.setLayoutManager(layoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(namaNilaiAdapter);
recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), LinearLayoutManager.VERTICAL));
try
String message1 = getArguments().getString(KEY_KELAS);
String message2 = getArguments().getString(KEY_MAPEL);
if ((message1 != null) && (message2 != null))
prepareNamaNilaiData(message1,message2);
else
prepareNamaNilaiData("-", "-");
catch (Exception ex)
ex.printStackTrace();
这是我在 prepareNamaNilaiData 上调用的光标代码
public Cursor lihatNamaNilai(String kelas, String mapel, String jenis_nilai)
SQLiteDatabase db = this.getWritableDatabase();
Cursor c = db.rawQuery("SELECT DISTINCT NAMA_NILAI, TANGGAL FROM " + TABLE_Nilai
+ " WHERE KELAS = ? AND MAPEL = ? AND JENIS_NILAI = ? ORDER BY NAMA_NILAI"
,new String[] kelas, mapel, jenis_nilai);
return c;
我希望循环可以显示从 sqlite 到 recyclerview 所需的所有数据。但是数据没有出现在recyclerview中
logcat 上没有显示错误。
【问题讨论】:
【参考方案1】:当循环结束时尝试Log.e(“count===“,namaNilaiList.size())
,并检查你的适配器,也许没有声明 LayoutInflater ...只是也许。
【讨论】:
Log.e(“count===”,namaNilaiList.size()) 不工作,不要读取数据库。 在我的适配器中声明了LayoutInflater。你还有其他解决方案吗? 我看到你的代码' while (!c.isAfterLast()) //showMessage("BELUM ADA DATA", "Belum ada nilai pengetahuan "+ c.getString(0) + " pada kelas "+ c.getString(1)); namaNilai[i] = new NamaNilai(c.getString(0), c.getString(1)); namaNilaiList.add(namaNilai[i]);我++; c.moveToNext(); ' 为什么不直接将数据输入到列表中?像'namaNilaiList.add(new NamaNilai(c.getString(0), c.getString(1)););'以上是关于如何使用光标和循环显示来自 sqlite 的片段的 recyclerview的主要内容,如果未能解决你的问题,请参考以下文章
如何使用列表视图在选项卡式活动的片段中呈现 SQLite 表数据 [重复]
如何在片段内的 recylerview 列表中显示 SQLite 数据库数据?
如何在不重新启动活动的情况下更新 recyclerview(来自 sqlite 的数据)