通过 ListView 和 id 删除数据库项
Delete item of database via ListView and id
我有一个 android 应用程序,其中包含 ListView
和本地 sql
数据库的数据。
现在我想从我的数据库中删除 ID 为
的项目
我想长按任何一行,这应该会删除该项目。
ListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
// DELETE ACTION
}
但是我怎样才能得到我的数据库的项目 ID?
目前,我在查询中将 ID 保存在隐藏的 TextView
中,并通过 findviewbyid()
.
获取此 ID
但这是正确的方法吗?
适配器:
public class DatabaseListAdapter extends BaseAdapter {
Context context;
ArrayList<DatabaseListItems> databaseList;
public DatabaseListAdapter(Context context, ArrayList<DatabaseListItems> list) {
this.context = context;
databaseList = list;
}
@Override
public int getCount() {
return databaseList.size();
}
@Override
public Object getItem(int position) {
return databaseList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup arg2) {
DatabaseListItems databaseListItems = databaseList.get(position);
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.custom_listview_item, null);
}
TextView tvID = (TextView) convertView.findViewById(R.id.txtViewID);
tvID.setText(databaseListItems.getID());
return convertView;
}
}
使用 ID 和标题创建一个模型 class 并将其存储在列表视图中。例如
public class Data{
private int id;
private String title;
public Data(int id,String title){
this.id = id;
this.title = title;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
在您填写列表视图的地方执行此操作
list.add(new Data(1,"xyz"))
所以在点击事件里面
ListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
int id = list.get(posttion).getId(); //you can get id like this
}
我建议您为 ListView
使用 CursorAdapter
。如果是这样,我建议您从 bindView()
中的 Cursor
对象获取 ID。使用 ViewHolder 模式将一些信息附加到您的 ListView
行。
class ViewHolder{
TextView text;
ImageView image;
...
long id;}
为其添加长id并在长按时检索它。
让您的适配器实现 onItemLongClickListener。
public class DatabaseListAdapter extends BaseAdapter implements AdapterView.OnItemLongClickListener {
...
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
long itemID = databaseList.get(position).getID();
//Perform delete
return true;
}
因此您可以像在 getView() 方法中一样访问您的项目的 ID。
基本上你的适配器应该有数据,数据应该是要删除的项目的 id
,所以我们假设每个适配器都有一个名为 dataArrayList
的数组列表,其中包含你的适配器数据,当我们点击那个按钮时,我们删除了数据库中的项目,所以它看起来像:
deletebtn.setOnItemLongClickListener(->(position){
Contact mContact = dataArrayList.get(position).getContact();
deleteContact(mContact);
//adapter this then we can remove the listview adapter row whose data
//we just deleted in the db
arrayAdapter.getItem(position);
arrayAdapter.remove(toRemove);
arrayAdapter.notifyDatasetChange();
//finally we want to remove the arraylist data too from it
dataArrayList.remove(position);
}
//Our Delete method in our database class
public void deleteContact(Contact contact) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
new String[] { String.valueOf(contact.getID()) });
db.close();
}
创建 POJO class 项目或 id 喜欢
class info{
private String item;
private int id;
info(String item,int id){
this.item = item;
this.id = id;
}
public setId(int id){
this.id=id;
}
public setItem(String item){
this.item=item;
}
public int getId(){
return id;
}
public String getItem(){
return item;
}
}
并将对象存储到 ArrayList 中,以便您可以获取具有位置的特定项目的 ID
ArrayList.get(position).getId();
ArrayList.remove(position);
notifyDatasetChange();
或
简单你创建两个 ArrayList 就像
ArrayList<String> mItem = new ArrayList<String>();
ArrayList<String> mId = new ArrayList<String>();
然后你可以获取特定位置的 id 并将它们从 arraylist 中删除
mId.get(position);
mId.remove(position);
mItem.remove(position);
notifyDatasetChange();
我有一个 android 应用程序,其中包含 ListView
和本地 sql
数据库的数据。
现在我想从我的数据库中删除 ID 为
我想长按任何一行,这应该会删除该项目。
ListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
// DELETE ACTION
}
但是我怎样才能得到我的数据库的项目 ID?
目前,我在查询中将 ID 保存在隐藏的 TextView
中,并通过 findviewbyid()
.
但这是正确的方法吗?
适配器:
public class DatabaseListAdapter extends BaseAdapter {
Context context;
ArrayList<DatabaseListItems> databaseList;
public DatabaseListAdapter(Context context, ArrayList<DatabaseListItems> list) {
this.context = context;
databaseList = list;
}
@Override
public int getCount() {
return databaseList.size();
}
@Override
public Object getItem(int position) {
return databaseList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup arg2) {
DatabaseListItems databaseListItems = databaseList.get(position);
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.custom_listview_item, null);
}
TextView tvID = (TextView) convertView.findViewById(R.id.txtViewID);
tvID.setText(databaseListItems.getID());
return convertView;
}
}
使用 ID 和标题创建一个模型 class 并将其存储在列表视图中。例如
public class Data{
private int id;
private String title;
public Data(int id,String title){
this.id = id;
this.title = title;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
在您填写列表视图的地方执行此操作
list.add(new Data(1,"xyz"))
所以在点击事件里面
ListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
int id = list.get(posttion).getId(); //you can get id like this
}
我建议您为 ListView
使用 CursorAdapter
。如果是这样,我建议您从 bindView()
中的 Cursor
对象获取 ID。使用 ViewHolder 模式将一些信息附加到您的 ListView
行。
class ViewHolder{
TextView text;
ImageView image;
...
long id;}
为其添加长id并在长按时检索它。
让您的适配器实现 onItemLongClickListener。
public class DatabaseListAdapter extends BaseAdapter implements AdapterView.OnItemLongClickListener {
...
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
long itemID = databaseList.get(position).getID();
//Perform delete
return true;
}
因此您可以像在 getView() 方法中一样访问您的项目的 ID。
基本上你的适配器应该有数据,数据应该是要删除的项目的 id
,所以我们假设每个适配器都有一个名为 dataArrayList
的数组列表,其中包含你的适配器数据,当我们点击那个按钮时,我们删除了数据库中的项目,所以它看起来像:
deletebtn.setOnItemLongClickListener(->(position){
Contact mContact = dataArrayList.get(position).getContact();
deleteContact(mContact);
//adapter this then we can remove the listview adapter row whose data
//we just deleted in the db
arrayAdapter.getItem(position);
arrayAdapter.remove(toRemove);
arrayAdapter.notifyDatasetChange();
//finally we want to remove the arraylist data too from it
dataArrayList.remove(position);
}
//Our Delete method in our database class
public void deleteContact(Contact contact) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_CONTACTS, KEY_ID + " = ?",
new String[] { String.valueOf(contact.getID()) });
db.close();
}
创建 POJO class 项目或 id 喜欢
class info{
private String item;
private int id;
info(String item,int id){
this.item = item;
this.id = id;
}
public setId(int id){
this.id=id;
}
public setItem(String item){
this.item=item;
}
public int getId(){
return id;
}
public String getItem(){
return item;
}
}
并将对象存储到 ArrayList 中,以便您可以获取具有位置的特定项目的 ID
ArrayList.get(position).getId();
ArrayList.remove(position);
notifyDatasetChange();
或
简单你创建两个 ArrayList 就像
ArrayList<String> mItem = new ArrayList<String>();
ArrayList<String> mId = new ArrayList<String>();
然后你可以获取特定位置的 id 并将它们从 arraylist 中删除
mId.get(position);
mId.remove(position);
mItem.remove(position);
notifyDatasetChange();