调用notifyDataSetChanged时更改了android listview顺序

时间:2011-02-19 07:58:24

标签: android listview baseadapter

所有。    当我使用notifyDataSetChanged()时,listview显示顺序将会改变。

像这样

  • 3
  • 2
  • 1

    创建当前活动时。但是当我改变数据时。它将是

  • 1
  • 2
  • 3

我不希望订单发生变化,我也不明白为什么会发生这种情况。

这是我的适配器类

中的一段代码
    public static class ItemAdapter extends BaseAdapter {

        private String[] mData;
        private LayoutInflater mInflater;

// I called this method  to change data
        public void setEditText(int position, final String item) {
            mData[position] = item;
            notifyDataSetChanged();
        }



}

我在某个对话框中更改数据

       builder = new AlertDialog.Builder(ct);
                            builder.setTitle(R.string.pickStatus)
                                    .setView(edBuffer)
                                    .setPositiveButton(R.string.save, new DialogInterface.OnClickListener() {
                                                @Override
                                                public void onClick(
                                                        DialogInterface dialog, int id) {
                                                    // TODO Auto-generated method stub
                                                    canPop = true;
                                                    final String tmp = edBuffer.getText().toString();
                                                    KbonezLog.e(String.format( "set into key %d", key)); 
//use mData key to set value
setEditText(key, tmp);
dialog.dismiss();
}})

4 个答案:

答案 0 :(得分:1)

如果没有看到适配器的完整源代码,很难说出发生了什么,但这听起来像是getView()实现中的一个问题。每次调用getView()时,必须重新绑定所有数据。

答案 1 :(得分:1)

我遇到了类似问题here

我通过总是在getView()实现中创建一个新的ViewHolder来解决它。

所以我认为Romain Guy提供了解决此类问题的正确方法。

希望它有效。

答案 2 :(得分:0)

在我看来,在setEditText中,您实际上是在更改列表内容,因此这可能是开始寻找问题的好地方。

答案 3 :(得分:0)

我认为不应使用私有String [] mData; ,而应使用以下内容,

private ArrayList mData = new ArrayList();
mData.add(item);

在我的情况下,它有效并且不会更改数据,我希望您能从中解决问题。