Android Studio,删除ListView项而不影响其他项

时间:2016-07-07 06:43:26

标签: android listview android-studio listviewitem

我正在制作待办事项列表,并且在从ListView中删除项目时遇到了麻烦。

如果用户在他的列表上做了一件事,他可以点击该项目,它将被击穿,或者罢工将被取消:

lv.setOnItemClickListener(new AdapterView.OnItemClickListener(){
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            TextView tv = (TextView) view;
            int i_strikethrough = tv.getPaintFlags();
            if(i_strikethrough == 1297){
                tv.setPaintFlags(tv.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
            } else if (i_strikethrough == 1281){
                tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
            }
        }
    });

如果用户长按一下,会弹出一条消息,他可以选择删除此项目:

lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, final int position, long id) {
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
            alertDialogBuilder.setTitle("Delete");
            alertDialogBuilder.setMessage("Are you sure you want to delete?");
            alertDialogBuilder.setCancelable(false);
            alertDialogBuilder.setPositiveButton("Yes", new DialogInterface.OnClickListener()
            {
                @Override
                public void onClick(DialogInterface dialogInterface, int i)
                {
                    adapterInhalt.remove(adapterInhalt.getItem(position));
                }
            });
            alertDialogBuilder.setNegativeButton("No", new DialogInterface.OnClickListener()
            {
                @Override
                public void onClick(DialogInterface dialogInterface, int i)
                {
                    dialogInterface.cancel();
                }
            });
            AlertDialog alertDialog = alertDialogBuilder.create();
            alertDialog.show();

            return true;
        }
    });

现在,我的问题如下:

想象一下,第二个项目被击穿,但第三个项目没有。

如果我删除了第二个项目,那么第三个项目位于第二个位置并被删除。但它不应该被打破。

我希望您了解我的问题,并且您可以帮我解决这个问题。

我希望这张照片可以帮助您理解这个问题: A helping Picture

2 个答案:

答案 0 :(得分:0)

您没有正确实施列表视图。列表视图回收视图。这意味着他们重复使用相同的视图,并将列表中的不同位置放入其中。这提供了非常有效的UI代码。这也意味着如果您对适配器的getView之外的视图进行了任何更改,那么当您删除或滚动时,这些更改将应用​​于错误的项目。

制作列表视图的写入方式是,如果要更新任何位置的UI,可以更改该位置的模型。然后通过调用notifyDataSetChanged()告诉适配器它需要更新。然后将调用getView函数来重绘每个可见元素,并应该应用通过。

答案 1 :(得分:0)

您应该为项目定义一个类,该类具有一个用于警示状态的布尔字段。例如:

$env

然后您可以检查某个项目是否在适配器的public class MyItem{ String name; boolean isStriked; } 方法中被删除。您可以通过这种方式增加代码的内聚力。顺便说一下,我建议使用RecyclerView,因为它有项目删除的预定义方法和动画