Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 从sqlite删除项目后,RecyclerView不会更新?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经从sqlite填充了recyclerview.当点击每一行时,行将从sqlite中删除,但recyclelerview在删除后没有显示更新列表. Recycler视图仅在再次启动活动后显示更新列表.我的问题是如何在不刷新的情况下从recylcerview中删除项目后立即更新回收站视图.

以下是我的代码

SecondActivity.java

import android.support.v7.app.AppCompatActivity;
import android.os.bundle;
import android.support.v7.widget.linearlayoutmanager;
import android.support.v7.widget.RecyclerView;

import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;

import java.util.ArrayList;
import java.util.List;

public class SecondActivity extends AppCompatActivity {
    DatabaseHelpher Helpher;
    List<DatabaseModel> dbList;
RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

    @Override
    protected void onCreate(Bundle savedInstanceStatE) {
        super.onCreate(savedInstanceStatE);
        setContentView(R.layout.activity_second);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);


        Helpher = new DatabaseHelpher(this);
        dbList= new ArrayList<DatabaseModel>();
        dbList = Helpher.getDataFromDB();


        mRecyclerView = (RecyclerView)findViewById(R.id.recycleview);

        mRecyclerView.setHasFixedSize(true);

        // use a linear layout manager
        mLayoutManager = new linearlayoutmanager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);

        // specify an adapter (see also next examplE)
        mAdapter = new RecyclerAdapter(this,dbList);
        mRecyclerView.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged ();
    }

    @Override
    public Boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_second,menu);
        return true;
    }



    @Override
    public Boolean onOptionsItemSELEcted(MenuItem item) {
        switch (item.getItemId()) {
            case android.R.id.home:
                finish();
                return true;
        }
        return super.onOptionsItemSELEcted(item);
    }
}

DatabaseHelpher.java

import android.content.ContentValues;
import android.content.Context;
import android.database.cursor;
import android.database.sqlite.sqliteDatabase;
import android.database.sqlite.sqliteOpenHelper;
import android.util.Log;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class DatabaseHelpher extends sqliteOpenHelper {
    private static final String DATABASE_NAME="student";
    private static final int DATABASE_VERSION = 1;
    private static final String stuDENT_TABLE = "stureg";
    private static final String stu_TABLE = "create table "+stuDENT_TABLE +"(@R_39_4687@T,email TEXT priMary key,roll TEXT,address TEXT,branch TEXT)";

Context context;

    public DatabaseHelpher(Context context) {
        super(context,DATABASE_NAME,null,DATABASE_VERSION);
        this.context = context;
    }

    @Override
    public void onCreate(sqliteDatabase db) {

        db.execsql(stu_TABLE);
    }

    @Override
    public void onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) {

        db.execsql("drop table IF EXISTS " + stuDENT_TABLE);

        // create tables again
        onCreate(db);
    }
/* Insert into database*/
    public void inserTintoDB(String name,String email,String roll,String address,String branch){
        Log.d("insert","before insert");

        // 1. get reference to writable DB
        sqliteDatabase db = this.getWritableDatabase();

        // 2. create ContentValues to add key "column"/value
        ContentValues values = new ContentValues();
        values.put("name",Name);
        values.put("email",email);
        values.put("roll",roll);
         values.put("address",address);
        values.put("branch",branch);

        // 3. insert
        db.insert(stuDENT_TABLE,values);
        // 4. close
        db.close();
        Toast.makeText(context,"insert value",Toast.LENGTH_LONG);
        Log.i("insert into DB","After insert");
    }
/* Retrive  data from database */
    public List<DatabaseModel> getDataFromDB(){
        List<DatabaseModel> modelList = new ArrayList<DatabaseModel>();
        String query = "SELEct * from "+stuDENT_TABLE;

        sqliteDatabase db = this.getWritableDatabase();
cursor cursor = db.rawQuery(query,null);

        if (cursor.moveToFirst()){
            do {
                DatabaseModel model = new DatabaseModel();
                model.setName(cursor.getString(0));
                model.setEmail(cursor.getString(1));
                model.setRoll(cursor.getString(2));
                model.setAddress(cursor.getString(3));
                model.setBranch(cursor.getString(4));

                modelList.add(model);
            }while (cursor.moveToNext());
        }


        Log.d("student data",modelList.toString());


        return modelList;
    }


    /*delete a row from database*/

    public void deleteARow(String email){
        sqliteDatabase db= this.getWritableDatabase();
        db.delete(stuDENT_TABLE,"email" + " = ?",new String[] { email });
        db.close();
    }

}

DatabaseModel.java

public class DatabaseModel {
    private String name;
    private String roll;
    private String address;
    private String branch;
    private String email;

    public String getName() {
        return name;
    }

    public void setName(String Name) {
        this.name = name;
    }

    public String getRoll() {
        return roll;
    }

    public void setRoll(String roll) {
        this.roll = roll;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getBranch() {
        return branch;
    }

    public void setBranch(String branch) {
        this.branch = branch;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

RecyclerAdapter.java

import android.content.Context;
import android.content.Intent;
import android.os.bundle;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;


public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {

  static   List<DatabaseModel> dbList;
    static  Context context;

    static DatabaseHelper dh;
    RecyclerAdapter(Context context,List<DatabaseModel> dbList ){
        this.dbList = new ArrayList<DatabaseModel>();
        this.context = context;
        this.dbList = dbList;
dh=new DatabaseHelper(context);
    }

    @Override
    public RecyclerAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,int viewTypE) {

        View itemLayoutView = LayoutInflater.from(parent.getContext()).inflate(
                R.layout.item_row,null);

        // create viewHolder

        ViewHolder viewHolder = new ViewHolder(itemLayoutView);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(RecyclerAdapter.ViewHolder holder,int position) {

        holder.name.setText(dbList.get(position).getName());
        holder.email.setText(dbList.get(position).getEmail());

    }

    @Override
    public int getItemCount() {
        return dbList.size();
    }

    public static class ViewHolder extends RecyclerView.ViewHolder implements View.onClickListener {

        public TextView name,email;

        public ViewHolder(View itemLayoutView) {
            super(itemLayoutView);
            name = (TextView) itemLayoutView
                    .findViewById(R.id.rvName);
            email = (TextView)itemLayoutView.findViewById(R.id.rvemail);
            itemLayoutView.setOnClickListener(this);

        }

        @Override
        public void onClick(View v) {
           dh.delete(dbList.get(getAdapterPosition()).getEmail);


            Toast.makeText(RecyclerAdapter.context,"you have clicked Row " + getAdapterPosition(),Toast.LENGTH_LONG).show();
        }
    }
}

我试图使用mAdapter.notifyDataSetChanged()更新recyclerview;但它对我不起作用.请给我打电话.谢谢

解决方法

从arraylist和数据库删除数据,然后通知您的列表将更新.

要么

数据库删除数据,删除后从数据库获取数据并使用新数据重新加载arraylist将完成您的工作

dbList.remove(getAdapterPosition());
notifyDataSetChanged();
//or use this for better perfomance.
notifyItemRemoved(getAdapterPosition());

删除方法中传递位置

大佬总结

以上是大佬教程为你收集整理的android – 从sqlite删除项目后,RecyclerView不会更新?全部内容,希望文章能够帮你解决android – 从sqlite删除项目后,RecyclerView不会更新?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。