尝试从自定义待办事项列表中删除单行时出现问题



我想通过单击复选框并通过删除按钮删除它们来从待办事项列表中删除选定的行,为此我在自定义适配器中设置了setOnCheckedChangeListener我的复选框并setOnClickListener我的删除按钮,现在请记住,删除按钮在我的片段视图上膨胀了,我正在我的行视图上使用它, 但问题只是我的待办事项列表中的最后一个元素被删除,而不是其余元素,我尝试在片段视图中工作并稍后通知适配器,但我得到的只是我的复选框上的空指针错误。

行视图:

todoCheckBox = (CheckBox) convertView.findViewById(R.id.todo_CheckBox);
    todoTextView.setText(values.get(position));
    todoCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            //Toast.makeText(getContext(), " CheckBox Status: " + isChecked, Toast.LENGTH_LONG).show();
            mDelete.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (mDelete.isPressed() && (todoCheckBox.isChecked())) {
                     //convertView.clearFocus(position);
                     mAdapter.clear();
                     //mAdapter.notifyDataSetChanged();
                    }
                }
            });
        }
    });

片段视图:

@TargetApi(9) // remember this for isEmpty()
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                     Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_todo, container, false);
ArrayList<String> todoList = new ArrayList<String>();
mAdapter = new UsersAdapter(getActivity(), todoList);
listViewToDo = (ListView) v.findViewById (android.R.id.list);
listViewToDo.setAdapter(mAdapter);
mToDoField = (EditText) v.findViewById(R.id.todo_editText);
mDelete = (Button) v.findViewById(R.id.delete_button);
mAdd = (Button)v.findViewById(R.id.add_button);
mAdd.setOnClickListener(new View.OnClickListener() {
    @Override
        public void onClick(View view) {
        String toDo = mToDoField.getText().toString().trim();
        if (toDo.isEmpty()){
            return;
        }
        mAdapter.add(toDo);
        mToDoField.setText("");
    }
});
return v;
}
}
您需要在

onChecked 语句之外为删除按钮分配一个 onclick 侦听器。 在将 onClick 事件分配给添加按钮后立即将其添加到代码中。 这是因为 android 中的视图每种事件类型只能有 1 个侦听器。

onClick 事件可能如下所示,使用 sparese

mDelete.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            SparseBooleanArray checked = listViewToDo.getCheckedItemPositions();
            for (int i = 0; i < listViewToDo.getCount(); i++){
                if (checked.get(i)==true)
                {
                     mAdapter.remove(i);
                } 
                mAdapter.notifyDataSetChanged(); 
            }
             listViewToDo.clearChoices();               
        }
    });

最新更新