尝试从自定义待办事项列表中删除单个行时遇到问题?

时间:2015-06-16 20:29:33

标签: android android-fragments checkbox android-studio

我想删除待办事项列表中的选定行,方法是点击复选框并通过删除按钮将其删除,因为我在我的自定义适配器中设置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;
}
}

1 个答案:

答案 0 :(得分:1)

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

使用备用

,onClick事件可能如下所示
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();               
        }
    });