我的项目中有一个列表视图,它包含图像和信息
假设它包含50个人的信息。
现在,如果我要删除最后两项,则在删除最后一项后,listlview会自动聚焦到列表顶部。
所以现在用户向下滚动所有项目以到达第49个项目并将其删除
那么有没有办法在我删除项目的位置修复listview位置。
//删除信息的代码
public void deleteFeed(int rowID) {
// fetch the image File name
Cursor cursor = dbAdapter.getTimelineFeedByID(mSysPrefs.getBabyID(), rowID);
if(cursor != null && cursor.moveToFirst()) {
// fetch from DB Cursor
String imageFileName = cursor.getString(cursor.getColumnIndex(DatabaseAppHelper.KEY_IMAGENAME));
File file = new File(GlobalConstants.FILE_PATH, imageFileName + GlobalConstants.IMAGE_EXTENSION);
if(file.exists()) {
file.delete();
}
//listview.smoothScrollToPosition(0, listview.getHeight());
listview.smoothScrollToPosition(0, listview.getBottom());
}
// now delete the record from the DB
if(dbAdapter.deleteTimelineFeed(rowID) != -1) {
onResume();
} else {
Toast.makeText(this, "Please try again..", Toast.LENGTH_LONG).show();
}
}
//创建列表视图的代码
@Override
protected void onResume() {
super.onResume();
turnGPSOn(); // method to turn on the GPS if its in off state.
getMyCurrentLocation();
dbAdapter.openDBConnection();
new Handler().post(new Runnable() {
@Override
public void run() {
timelineCursorAdapter = new TimelineCursorAdapter(TimelineViewActivity.this,
dbAdapter.getAllTimelineFeedsForBaby(mSysPrefs.getBabyID()), 0);
listview.setAdapter(timelineCursorAdapter);
//timelineCursorAdapter.notifyDataSetChanged();
listview.invalidateViews();
}
});
}
答案 0 :(得分:1)
从您删除的项目中获取位置,然后将位置传递给setselection方法,如下所示:listview.setSelection(pos);
答案 1 :(得分:0)
尝试使用以下代码
在删除列表项之前,使用以下代码
获取可见位置 mIndex = listView.getFirstVisiblePosition();
View v = listView.getChildAt(0);
mTop = (v == null) ? 0 : v.getTop();
删除设置该位置以列出视图的项目
listView.setSelectionFromTop(mIndex, mTop);
答案 2 :(得分:0)
getCount()返回适配器保存的当前项位置。以下方法可以通过在onResume()
中调用它来提供帮助mListView.smoothScrollToPosition(mAdapter.getCount());