如何在Android中删除列表中的项目而不删除它?
我是Android新手,我的问题是我已经创建了一个方法“标记为已完成”,当我点击它时,它会在数据库中设置真实值。我现在想要的是,当我单击“标记为已完成”时,该项目将从列表中删除,但不会从数据库中删除。可能吗 编辑: 我的自定义列表适配器:如何在Android中删除列表中的项目而不删除它?,android,android-listview,android-sqlite,Android,Android Listview,Android Sqlite,我是Android新手,我的问题是我已经创建了一个方法“标记为已完成”,当我点击它时,它会在数据库中设置真实值。我现在想要的是,当我单击“标记为已完成”时,该项目将从列表中删除,但不会从数据库中删除。可能吗 编辑: 我的自定义列表适配器: public class CustomAdapter extends ArrayAdapter<Task> { private List<Task> dataitem; private Activity activit
public class CustomAdapter extends ArrayAdapter<Task> {
private List<Task> dataitem;
private Activity activity;
TodoTask_Database db;
public CustomAdapter(Activity a, int textViewResourceId, List<Task> items) {
super(a, textViewResourceId, items);
this.dataitem = items;
this.activity = a;
}
public static class ViewHolder{
public TextView tasklistTitle;
public TextView createdDate;
public CheckBox completedflag;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
final ViewHolder holder;
if (v == null) {
LayoutInflater vi =
(LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.tasklist_row, null);
holder = new ViewHolder();
holder.tasklistTitle = (TextView) v.findViewById(R.id.tasklistTitle);
holder.createdDate = (TextView) v.findViewById(R.id.createdDate);
holder.completedflag = (CheckBox) v.findViewById(R.id.completedflag);
v.setTag(holder);
}
else
holder=(ViewHolder)v.getTag();
final Task custom = dataitem.get(position);
if (custom != null) {
holder.tasklistTitle.setText(custom.getTaskListTitle());
holder.createdDate.setText(custom.getTaskListCreated());
holder.completedflag.setText(custom.getTaskListCompletedFlag());
}
return v;
}
public synchronized void refresAdapter(List<Task> dataitems) {
dataitem.clear();
dataitem.addAll(dataitems);
notifyDataSetChanged();
}
}
公共类CustomAdapter扩展了ArrayAdapter{
私有列表数据项;
私人活动;
TodoTask_数据库数据库数据库;
公共CustomAdapter(活动a,int textViewResourceId,列表项){
super(a,textViewResourceId,items);
this.dataitem=项目;
本活动=a;
}
公共静态类视图持有者{
公共文本视图任务列表标题;
公共文本视图创建数据;
公共复选框完成标志;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图v=转换视图;
最终持票人;
如果(v==null){
放平机六=
(LayoutInflater)activity.getSystemService(Context.LAYOUT\u充气机\u服务);
v=vi.充气(R.布局.任务列表,空);
holder=新的ViewHolder();
holder.tasklistTitle=(TextView)v.findViewById(R.id.tasklistTitle);
holder.createdDate=(TextView)v.findViewById(R.id.createdDate);
holder.completedflag=(复选框)v.findViewById(R.id.completedflag);
v、 setTag(支架);
}
其他的
holder=(ViewHolder)v.getTag();
最终任务自定义=dataitem.get(位置);
如果(自定义!=null){
holder.tasklistTitle.setText(custom.getTaskListTitle());
holder.createdDate.setText(custom.getTaskListCreated());
holder.completedflag.setText(custom.getTaskListCompletedFlag());
}
返回v;
}
公共同步的void refresAdapter(列出数据项){
dataitem.clear();
dataitem.addAll(dataitems);
notifyDataSetChanged();
}
}
添加
在案例R.id.marka完成时
。如下
case R.id.MarkAsCompleted:
db = new TodoTask_Database(getApplicationContext());
task = adapter.getItem(Position);
int taskList_Id = task.getTaskListId();
// here is database method which is setting item value true when mark as completed on long click listener is pressed.
db.Complete_TaskList(taskList_Id);
// Remove from List
list.remove(Position); // Added here
adapter.notifyDataSetChanged(); // Added here
break;
这将从ListView中删除项目表单 从列表适配器中删除该项。是的,我正试图在自定义列表适配器中执行此操作。但是失败。发布你所做的事情删除列表数据中的对象,然后调用
适配器。notifyDataSetChanged
。希望这有帮助。我已经编辑了我的问题并发布了我的代码,请现在检查。哦,但在再次上传应用程序后,它再次显示相同的值,它不会更新列表。怎么做?我以为你会这么做。您应该修改db.getAllTaskList()
的代码。在这里,您应该添加where条件以获取所有列表,这些列表对于已完成的列具有值false
。如果您没有获得db.getAllTaskList()
list.remove(Position); // Remove item from List
adapter.notifyDataSetChanged(); // Notify adapter
case R.id.MarkAsCompleted:
db = new TodoTask_Database(getApplicationContext());
task = adapter.getItem(Position);
int taskList_Id = task.getTaskListId();
// here is database method which is setting item value true when mark as completed on long click listener is pressed.
db.Complete_TaskList(taskList_Id);
// Remove from List
list.remove(Position); // Added here
adapter.notifyDataSetChanged(); // Added here
break;