我有一个列表,它从数据库中获取它的值。
我为每个项目放置了一个删除按钮。 当用户单击该按钮时,该项目将被删除。 我的问题是我不知道删除后如何刷新列表...
我已经在文件夹 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/