recyclerview内部联接SQLite

时间:2018-09-08 14:20:21

标签: android sqlite android-recyclerview

我有两个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();;
}

1 个答案:

答案 0 :(得分:1)

在您的数据更新方法中   如果方法在您的适配器中,则调用notifyDataSetChanged();    如果您的活动中使用了更新方法,请致电您的适配器。notifyDataSetChanged();

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

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

    例如,在适配器中

    public void refreshData(){
    
          Cursor=yourdatabase.getyourMethod();
    
            notifyDataSetChanged();}
    
  4. 然后从适配器之类的适配器接收广播呼叫refreshData

          adapter.refreshData()