【问题标题】:recyclerview inner join SQLiterecyclerview 内部连接 ​​SQLite
【发布时间】:2018-09-08 14:20:21
【问题描述】:

我有两个 sqlite 表,其中一个包含 Fid、name、mobile,其中第二个表包含 Sid、fsid、主题、标记。现在我想在 recyclerView 中获取包含 fid,name ,mobile ,sum(marks) 的数据,但是当我从第一个表适配器输入新数据时没有显示它。

这是我的查询:

Cursor c = db.rawQuery("SELECT  id ,name ,mobile ,SUM(marks) FROM d_TB INNER JOIN d_TBL ON id = id_t ",null);
    return c;

这是我的适配器类:

  @Override
public void onBindViewHolder(final MyHolder holder, final int position) {
    final CrudData data_ = student.get(position);
    holder.itxt.setText(student.get(position).getId());
    holder.nametxt.setText(student.get(position).getName());
    holder.mobileTxt.setText(student.get(position).getmobile());
    holder.sum_.setText(student.get(position).getMarks());
    holder.setItemClickListener(new ItemLongClickListener() {
           @Override
             public void onItemClick(View v, int pos) {
               Intent i = new Intent(c,EditMarks.class);
               i.putExtra("Id", players.get(position).getId());
               i.putExtra("Name", players.get(position).getName());
               c.startActivity(i);
              }
        });

这是我的方法:

    private void retrieve()
{
    crudData.clear();

    DBAdapter db=new DBAdapter(this);
    db.openDB();
    Cursor c=db.insertSab();

    while (c.moveToNext())
    {
        String id=c.getString(0);
        String name=c.getString(1);
        String pos=c.getString(2);
        String sum=c.getString(3);

        CrudData p=new CrudData(id,name,pos,sum);

        crudData.add(p);
    }
    if(!(crudData.size()<1))
    {
        rv.setAdapter(adapter);
    }
    db.closeDB();;
}

【问题讨论】:

  • 你是问recyclerview在插入新数据后没有更新吗?
  • 是的,recyclerView 没有更新
  • 不,我不是它不工作

标签: android sqlite android-recyclerview


【解决方案1】:

在您的数据更新方法中 如果方法在您的适配器中,请致电 notifyDataSetChanged(); 如果您的更新方法在您的活动中,请致电 youradapter.notifyDataSetChanged();

或者,如果您的数据来自某个 api 调用并插入到您的数据库中,您可以执行以下操作

  1. 从您将数据插入数据库的位置发送广播
  2. 然后在您设置适配器的活动中接收广播
  3. 在您的适配器中创建一个公共方法来获取您的数据,即您的光标

    在您的适配器中,例如

    public void refreshData(){
    
          Cursor=yourdatabase.getyourMethod();
    
            notifyDataSetChanged();}
    
  4. 然后从你的适配器接收你的广播调用 refreshData,比如

          adapter.refreshData()
    

【讨论】:

    猜你喜欢
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-27
    相关资源
    最近更新 更多