android - 如何通过 ListView 和刷新 ListView 从 SQLite 数据库中删除一行?

标签 android sqlite fetch delete-row

我有一个列表,它从数据库中获取它的值。

我为每个项目放置了一个删除按钮。 当用户单击该按钮时,该项目将被删除。 我的问题是我不知道删除后如何刷新列表...

我已经在文件夹 assets 中创建了一个数据库。

唯一的问题是删除和刷新列表

类 QusitionActivity:

public class QusitionActivity extends Activity {
  String path=Environment.getExternalStorageDirectory()+"/mmm" + "/"+"HOME";
  String[]qustion;
  ListView list;
  Myadapter adapter;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_qusition);
    SQLiteDatabase dataBase=openOrCreateDatabase(path, MODE_PRIVATE, null); 
    Cursor cursor=dataBase.rawQuery("SELECT qustion,position FROM List_qusition;"
                                    , null);
    qustion=new String[cursor.getCount()];
    int i=0;
    while (cursor.moveToNext()) {
         qustion[i]=cursor.getString(cursor.getColumnIndex("qustion"));     
        i++;
    }

    dataBase.close();
     list=(ListView)findViewById(R.id.listView1);
    adapter=new Myadapter(getApplicationContext());
    list.setAdapter(adapter);
  }
}

我的适配器类:

public class Myadapter extends BaseAdapter {
    LayoutInflater myInflater;
    public Myadapter(Context context) {
        myInflater=LayoutInflater.from(context);
    }
    @Override
    public int getCount() {
        return qustion.length;
    }
    @Override
    public Object getItem(int position) {
        return position;
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
      ViewHolder Holder;
      if(convertView==null) {
            Holder=new ViewHolder();
            convertView=myInflater.inflate(R.layout.item_custom_layout,null );
            Holder.qustion=(TextView)convertView.findViewById(R.id.text_qustion);
            Holder.delete=(Button)convertView.findViewById(R.id.button_delete);
            Holder.qustion.setText(qustion[position]);
            Holder.delete.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                SQLiteDatabase dataBase=openOrCreateDatabase(path,
                                                             MODE_PRIVATE, null);
                dataBase.execSQL("DELETE FROM List_qusition WHERE position="
                                 +(position+1) +";");
                dataBase.close();
                //  Delete_item(position);
             }
            });
            convertView.setTag(Holder);
      } else {
            Holder=(ViewHolder) convertView.getTag();
        }
        return convertView;
    }
}

ViewHolder 类

public class ViewHolder extends Activity {
    TextView qustion;
    Button delete;
}

最佳答案

你应该使用 CursorLoader和一个 CursorAdapter

它会在您的数据库更改时自动更新。就像现在一样,您的列表无法知道您删除了一行 - 即使您调用 notifyDataSetChanged(),它也只会查看保持不变的列表。

至少您可以查询一个新游标并将其数据加载到列表中,然后调用 notifyDataSetChanged()。但是我真的建议你不要这样做。

关于android - 如何通过 ListView 和刷新 ListView 从 SQLite 数据库中删除一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27106981/

相关文章:

android:如何在 Rest Web 服务中使用 asyncTask?

java - 如何在 Robolectric 中为自定义 View 配置 RoboAttributeSet?

android - 为我的 android 应用程序提供一个用 sqlcipher 加密的数据库不起作用,无法打开它

mysql - 将 MySQL 转换为 SQLite

reactjs - React-fetch 和 Whatwg-fetch 有什么区别

android - 返回上一个 fragment 的正确方法是什么?

sqlite - 如何在.NET Core中创建SQLite数据库文件?

android - 如何在/data/data/package-name/app_database/in android中创建数据库

php - 从 MySQL 表中获取 PHP 测验结果

typescript - 无法使用 bodyParser 获取请求正文