【发布时间】:2016-10-25 05:53:38
【问题描述】:
我的数据库中有一些值,并使用自定义光标适配器填充自定义 Listview 中的值。因此,当用户单击 listView 时,会打开一个新 Activity,并且当他选择删除按钮时,该值或视图应该消失,列表应该被刷新。
我在 SO 上提到了很多答案,但他们都建议从数据库中删除值(这不是我想要的),有些人正在使用 ArrayList 并建议我将它与自定义数组适配器一起使用。但我是使用光标适配器。
所以我的整个问题是如何从列表视图中删除一个值或删除一个视图?
Listview 项 onClick Listener 打开一个新的 Activity
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Constants.ROW_NUMBER=position;
TextView getRecordID = (TextView) view.findViewById(R.id.recordID);
Constants.ROW_NUMBER = Integer.parseInt(getRecordID.getText().toString());
Intent editIntent = new Intent(this,NoteDisplay.class);
editIntent.putExtra(Constants.ROW_NAME,Constants.ROW_NUMBER);
startActivity(editIntent);
}
这是新的活动,在按下菜单按钮时,记录将被标记为已删除,但不会从数据库中删除。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId())
{
case R.id.deletebutton:
DataBaseHelper deletedb = new DataBaseHelper(this);
int deletedata = deletedb.deleteAction(position,System.currentTimeMillis());
Intent dintent = new Intent(this,MainActivity.class);
dintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(dintent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
这是我的自定义光标适配器类,
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return inflater.inflate(R.layout.customlistview, parent, false);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
//int getDeleteFlag is initialized above
getDeleteFlag = cursor.getInt(cursor.getColumnIndex(DELETE_FLAG));
if(getDeleteFlag==0)
{
ll = (LinearLayout)view.findViewById(R.id.listViewLayout);
setListViewHeight(ll,context);
if (cursor != null) {
getText = cursor.getString(cursor.getColumnIndex(NOTE_TITLE));
existsRecordID = cursor.getString(cursor.getColumnIndex(RECORD_ID));
datevalue = cursor.getLong(cursor.getColumnIndex(RECORD_DATE));
}
Date newdate = new Date(datevalue);
tv = (TextView) view.findViewById(R.id.content);
recordID = (TextView) view.findViewById(R.id.recordID);
dateET = (TextView) view.findViewById(R.id.date);
tv.setText(getText.trim());
recordID.setText(existsRecordID);
dateET.setText(dateFormatter.format(newdate));
}else{
Toast.makeText(context, "FALSE VALUE", Toast.LENGTH_SHORT).show();
}
}
此时我很困惑是否要删除视图或值。
我的数据库中有一个名为“deleteflag”的行,其中存储 1=> 已删除 0=>未删除。
因此只有具有 1 的值才会被标记为已删除。
编辑 1:
我的bindView()方法中的上述代码不起作用
【问题讨论】:
-
如果您只是从列表视图中删除,那么届时它将被删除但不会从数据库中删除,因此当您再次进入该页面时,您可以看到已删除的视图(行),因为它不是从数据库中删除
-
@Piyush 如果我只检查
if(deleteflag==0)然后显示视图,否则不显示呢?如果是的话怎么做? -
您可以将该标志存储在数据库中
-
是的,您可以设置一个标志来显示 listView,然后 listView 项目将仅以这种方式显示。 @Piyush
-
@Piyush 是的,如果标志为 0,那么我也在这样做,然后显示在视图中,如果
1可以执行什么操作?即删除视图或在这种情况下可以做什么?