【问题标题】:How do I delete a row form SQLite DB via ListView and refresh list view?如何通过 ListView 从 SQLite DB 中删除一行并刷新列表视图?
【发布时间】:2014-11-24 14:21:57
【问题描述】:

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

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

我已经在 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);
  }
}

类 Myadapter:

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;
}

【问题讨论】:

  • 删除后从您的适配器调用 notifyDatasetChanged()

标签: android sqlite fetch delete-row


【解决方案1】:

您应该使用CursorLoaderCursorAdapter

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

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

【讨论】:

    【解决方案2】:

    在您的适配器上调用 notifyDataSetChanged()。这会根据数据库中的新值更新列表。

    您正在扩展的 BaseAdapter 的完整文档可以在这里找到http://developer.android.com/reference/android/widget/BaseAdapter.html

    【讨论】:

    • 谢谢..我知道上面的功能已经使用过了。但是我如何以及在哪里让程序正常工作。
    猜你喜欢
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 2017-08-02
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多