ListView在NotifyDataSetChanged上的位置问题

时间:2014-02-22 12:46:34

标签: android listview android-listview android-arrayadapter listadapter

我正在为adapter使用自定义列表CheckBoxListActivity。当我第一次向适配器提供列表时,它会显示项目从下到上的位置。意味着位置0是最下面的列表项,N是最顶层的项。当我选择最顶层的元素时,它给我位置N,我从列表中删除N索引的项目,然后调用notifyDataSetChanged。问题是它删除了索引0处的项目。第二个问题是在notifyDataSetChanged之后,现在最顶层的元素显示位置0,最底部的项目显示N位置。问题是什么以及如何解决?我是Android的新手,所以请相应帮助。

我发帖子删除代码:

代码

private OnClickListener deleteItemsListener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            ArrayList<Integer> positions = emails.getCheckedPositions();
            for(int p : positions)
            {
                messges.remove(p);
            }

            emails.notifyDataSetChanged();
            emails.clearList();
            emailListView.invalidate();

            deleteItems.setText("");
            deleteItems.setVisibility(Button.INVISIBLE);

        }
    };

哪里是ArrayList<Object>。下面的代码初始化列表和适配器。

mmessges = new ArrayList<Object>();
emails = new GMailAdapter(this, messges);
emailListView.setAdapter(emails);

提前谢谢。

1 个答案:

答案 0 :(得分:0)

这样做:

ArrayList<Integer> positions = emails.getCheckedPosiotions();
int[] positionArray = new int[position.size()];

for (int i = 0; i < positionArray; i++) {
    positionArray[i]= mmessges.size() - positions.get(i);
}

for (int p = 0; p < posiotionArray.length(); p++) {
    messges.remove(p);
}

emails.notifyDataSetChanged();