Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android中删除列表中的项目而不删除它?_Android_Android Listview_Android Sqlite - Fatal编程技术网

如何在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

我是Android新手,我的问题是我已经创建了一个方法“标记为已完成”,当我点击它时,它会在数据库中设置真实值。我现在想要的是,当我单击“标记为已完成”时,该项目将从列表中删除,但不会从数据库中删除。可能吗

编辑:

我的自定义列表适配器:

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;