关键词:
【中文标题】无法从 Listview 中删除项目(待办事项列表),长按没有任何反应【英文标题】:Can't remove item from Listview(To do list), nothing is happening on long press 【发布时间】:2021-12-30 20:44:04 【问题描述】:我正在尝试使用 sqlite 创建一个待办事项列表,当我长时间按下一个项目时,它将从列表(以及数据库)中删除。但我做不到,不明白如何删除(我是新手)。我还可以在 setOnItemLongClickListener 中做什么来从数据库中删除值? 这是我的 MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity
private ArrayList<String> items;
private ArrayAdapter<String> itemsAdapter;
private ListView lvItems;
private EditText e;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final DatabaseHelper helper = new DatabaseHelper(this);
lvItems = (ListView)findViewById(R.id.lvItems);
items = helper.getAllAcontacts();
itemsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);
lvItems.setAdapter(itemsAdapter);
e = (EditText)findViewById(R.id.etNewItem);
Button add = (Button)findViewById(R.id.btnAddItem);
add.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
if(!e.getText().toString().isEmpty())
if (helper.insert(e.getText().toString()))
Toast.makeText(MainActivity.this, "Inserted", Toast.LENGTH_SHORT).show();
else
Toast.makeText(MainActivity.this, "Not Inserted", Toast.LENGTH_SHORT).show();
else
e.setError("Enter To Do List Item");
items.clear();
items.addAll(helper.getAllAcontacts());
itemsAdapter.notifyDataSetChanged();
lvItems.invalidateViews();
lvItems.refreshDrawableState();
e.setText("");
);
setupListViewListener();
private void setupListViewListener()
lvItems.setOnItemLongClickListener(
new AdapterView.OnItemLongClickListener()
@Override
public boolean onItemLongClick(AdapterView<?> adapter,
View item, int pos, long id)
// Remove the item within array at position
items.remove(pos);
itemsAdapter.notifyDataSetChanged();
// Return true consumes the long click event (marks it handled)
return true;
);
这是我的数据库删除功能:
public void deleteItem(long itemId)
SQLiteDatabase db = this.getWritableDatabase();
db.delete(DatabaseHelper.LIST_TABLE_NAME, "_id = ?",
new String[] String.valueOf(itemId) );
【问题讨论】:
【参考方案1】:我能够使用光标解决它。主要问题是,我的删除功能无法获取 id,因此使用光标指向我想要删除的特殊位置。工作代码是:
private void setupListViewListener()
lvItems.setOnItemLongClickListener(
new AdapterView.OnItemLongClickListener()
@Override
public boolean onItemLongClick(AdapterView<?> adapter,
View item, int pos, long id)
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MainActivity.this);
dialogBuilder.setTitle("DELETE OR UPDATE");
dialogBuilder.setMessage("Write in text edit box and the tap on UPDATE to update value or simply tap on DELETE to delete value.");
dialogBuilder.setPositiveButton("Update", new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
if(!e.getText().toString().isEmpty())
if (helper.update(e.getText().toString(), pos))
Toast.makeText(MainActivity.this, "Updated!", Toast.LENGTH_LONG).show();
else
Toast.makeText(MainActivity.this, "Not Updated", Toast.LENGTH_SHORT).show();
else
e.setError("Enter To Do List Item");
items.clear();
items.addAll(helper.getAllAcontacts());
itemsAdapter.notifyDataSetChanged();
lvItems.invalidateViews();
lvItems.refreshDrawableState();
e.setText("");
);
dialogBuilder.setNegativeButton("Delete", new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which)
items.remove(pos);
helper.deleteItem(pos);
itemsAdapter.notifyDataSetChanged();
dialog.cancel();
);
dialogBuilder.create();
dialogBuilder.show();
return true;
);
在 DatabaseHelper 中:
public void deleteItem(int pos)
SQLiteDatabase db = this.getWritableDatabase();
List<Integer> database_ids= new ArrayList<Integer>();
Cursor c = db.rawQuery("SELECT*FROM "+LIST_TABLE_NAME,null);
while(c.moveToNext())
database_ids.add(Integer.parseInt(c.getString(0)));
db.delete(LIST_TABLE_NAME, " id=?",
new String[] String.valueOf(database_ids.get(pos)) );
c.close();
【讨论】:
在AngularJS中编写待办事项列表时无法理解删除过程
】在AngularJS中编写待办事项列表时无法理解删除过程【英文标题】:NotabletounderstandthedeletingprocesswhilewritingtodolistinAngularJS【发布时间】:2017-02-1718:45:38【问题描述】:我正在尝试使用以下代码在Angularjs中编写待办事项应用程序。f... 查看详情
如何让 splice() 方法在我的待办事项列表中工作?
...待办事项列表,并将使用拼接方法从列表中删除项目。我无法让它工作。我将拼接的项目带到控制台,因此我的删除按钮和我的删除功能之间的“连接”似乎有效。我也尝试了slice方法并且有效,但由于某种原因,sp 查看详情
无法在初始渲染中显示待办事项列表
】无法在初始渲染中显示待办事项列表【英文标题】:UnabletoshowtodoListinInitialrenderinreact【发布时间】:2021-08-0708:32:06【问题描述】:我正在尝试使用react、redux、redux-form和firestore数据库构建todoList,我还可以使用操作或操作创建... 查看详情
如何从 SwiftUI 的详细信息视图(编辑项目视图)中删除核心数据条目?
】如何从SwiftUI的详细信息视图(编辑项目视图)中删除核心数据条目?【英文标题】:HowtodeleteCoreDataentryfromDetailsView(EditItemView)inSwiftUI?【发布时间】:2019-12-0505:14:06【问题描述】:我在SwiftUI中制作了一个非常简单的应用程序。... 查看详情
JavaScript/HTML 中的待办事项列表
...删除列表中的所有内容。它不会让我添加新条目,我似乎无法弄清楚为什么。只要我在列表中至少有一个条目,它就可以正常工作。非常感谢您的帮助。<head><scripttype="text 查看详情
数据库中的待办事项列表项更新不适用于 Django
...描述】:我想完成我的待办事项应用程序。但是,我仍然无法正确编辑项目。我的想法是通过选择特定项目并用.save()覆盖其信息来更新数据库。有人能找出正确的update()函数来让它工作吗?这是我的代码:urls.pyfromd 查看详情
如何从android的listview中删除一个项目
】如何从android的listview中删除一个项目【英文标题】:howtodeleteanitemfromlistviewinandroid【发布时间】:2011-05-2711:27:14【问题描述】:我的应用程序包含一个列表视图。列表视图中的每个项目都有一个删除按钮。但删除按钮无法删除... 查看详情
当我将 OnResume 函数用于带有数据库的简单待办事项列表应用程序时,OnCreate 函数被删除
...有数据库的简单待办事项列表应用程序时,OnCreate函数被删除【英文标题】:OnCreatefunctionsgetremovedwhenIuseanOnResumefunctionforasimpleToDoListappwithaDatabase【发布时间】:2021-08-2407:27:15【问题描述】:我正在尝试制作一个简单的待办事项列... 查看详情
ListView 不显示添加的项目
】ListView不显示添加的项目【英文标题】:ListViewisnotshowingitemsthatareadded【发布时间】:2020-09-0205:47:11【问题描述】:编辑收到错误,原来是模拟器API版本的问题。在更高的API版本中工作正常我是Android开发的新手,我正在尝试构... 查看详情
NSDocument 用于关系数据/待办事项列表?
...OSX应用程序,用户可以在其中编辑类似于待办事项列表的项目-每个项目都有文本、状态(完成/待办事项)、创建日期和一些其他数据。待办事项列表的项目也与其他实体有关系。我为此创建了一个iOS应用程序,它使用核心数据... 查看详情
iis如何设置开以访问cshtml文件不是mvc架构的
...tus”表单。然而,随着应用程序变得更加复杂,这种方法无法进行相应的扩展来处理更大的复杂问题。大部分Web应用程序现在已经对模型-视图-控制器(MVC)架构进行了标准化,使用单独的代码实现业务逻辑、显示逻辑和用户交互... 查看详情
如何从 AngularJS 范围内的数组中删除项目?
】如何从AngularJS范围内的数组中删除项目?【英文标题】:HowtoremoveanitemfromanarrayinAngularJSscope?【发布时间】:2012-12-2409:51:22【问题描述】:简单的待办事项列表,但每个项目的列表页面上都有一个删除按钮:相关模板HTML:<trng... 查看详情
无法读取未定义的属性(读取“地图”)待办事项列表
】无法读取未定义的属性(读取“地图”)待办事项列表【英文标题】:Cannotreadpropertiesofundefined(reading\'map\')TodoList【发布时间】:2022-01-2321:34:58【问题描述】:useEffect(()=>//GetValuefromDbconsttodo=collection(db,\'Todos\');consttodoSnapshot=get... 查看详情
Scrum:由非技术 PO 管理的待办事项中的技术项目? [关闭]
】Scrum:由非技术PO管理的待办事项中的技术项目?[关闭]【英文标题】:Scrum:TechnicalitemsinabacklogthatismanagedbyanontechnicalPO?[closed]【发布时间】:2010-11-2505:35:47【问题描述】:是否应该将诸如“将服务器从v1升级到v2”或“提高启动... 查看详情
Android:无法从 ListView 和 SQLite 中删除记录
】Android:无法从ListView和SQLite中删除记录【英文标题】:Android:Can\'tdeleterecordfromListViewandSQLite【发布时间】:2013-10-0619:23:12【问题描述】:我尝试了几种方法从列表视图中删除记录长按项目,但是,没有任何反应,没有错误,没... 查看详情
从 Todo 应用项目中删除项目
...该项目应该被删除。我能够部分实现前两个和第三个。我无法通过 查看详情
Android:从 ListView/ArrayAdapter Activity 中删除项目
】Android:从ListView/ArrayAdapterActivity中删除项目【英文标题】:Android:RemovingitemsfromaListView/ArrayAdapterActivity【发布时间】:2010-11-2203:35:59【问题描述】:我有一个(消息)列表,我想让用户能够从列表中删除这些项目。我已经扩展... 查看详情
待办事项未出现在 Visual Studio 2012 的任务列表中
】待办事项未出现在VisualStudio2012的任务列表中【英文标题】:TodotasksnotappearingintheTaskListinvisualstudio2012【发布时间】:2012-08-3016:36:46【问题描述】:我最近升级到VisualStudio2012,除了以“//todo”开头的cmets不再出现在任务列表中之... 查看详情