Listview会自动滚动到顶部

时间:2015-02-11 10:30:47

标签: android listview

我的项目中有一个列表视图,它包含图像和信息 假设它包含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();

        }
    });
}

3 个答案:

答案 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());