我是初级级别的Android开发人员,正致力于创建基本的待办事项列表应用。该应用程序包含自定义列表视图,带有用于显示优先级的彩色圆圈,标题以及用于在用户完成后检查和删除项目的复选框。该应用程序使用SQLite数据库存储这些待办事项,并使用Loader检索数据。
我尝试的是在选中复选框后立即从列表中删除该项目。
我尝试在Adapter类中实现删除任务(也尝试动画删除。):
CheckBox itemCheck = (CheckBox)view.findViewById(R.id.todo_checked);
itemCheck.setChecked(false);
itemCheck.setTag(priority);
itemCheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
int idIndex = cursor.getColumnIndex(TodoTable.ID);
final int id = cursor.getInt(idIndex);
final Uri uriTodDelete = ContentUris.withAppendedId(TodoTable.TABLE_URI,id);
Animation slideOut = AnimationUtils.loadAnimation(context,android.R.anim.slide_out_right);
slideOut.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
context.getContentResolver().delete(uriTodDelete,null,null);
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
view.startAnimation(slideOut);
问题是,每当我删除列表视图的顶部项目时,它下方的项目都会被删除。但是如果我从底部删除它就可以了。
我该如何解决这个问题?任何帮助将不胜感激。
P.S Content Resolver类的delete方法正在处理notifyDataSetChanged()方法。
答案 0 :(得分:0)
疯狂猜测,您没有将光标移动到相关行 所以光标在pos x上,但你可以点击-on listview- on item y。
因此您需要在尝试获取ID值之前将光标移动到相关位置。
我假设您在getView()
中执行此代码?当你使用适配器时。
您需要使用getView()
中传递的位置参数,如下所示:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
:
:
if(isChecked){
cursor.moveToPosition(position);
int idIndex = cursor.getColumnIndex(TodoTable.ID);
final int id = cursor.getInt(idIndex);
:
:
}
:
:
}
你还需要确保光标是re query
,否则一旦你从列表中删除项目,你可能会遇到一些问题
- 如果您使用cursor adapter
,我认为这是自动处理的?
只需仔细检查即可。