在Android中没有修改的ArrayList值已更改

时间:2014-02-19 06:30:24

标签: android listview adapter

我正在开发一个Android应用程序。

我有一个屏幕-A ,带有显示按钮。当用户点击此显示按钮时,我会显示一个对话框,其中包含带有复选框的Listview 和两个按钮提交取消即可。

editGroupUsersDialog = new Dialog(mcontext);
editGroupUsersDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
editGroupUsersDialog.setContentView(R.layout.edit_group_users_layout);
editGroupUsersDialog.setCanceledOnTouchOutside(true);
editGroupUsersDialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
editGroupUsersDialog.show();

ArrayList<User> users = //got from the server;

现在我在 screnn-A 中再添加一个静态变量,并使用上述用户进行初始化。

public static ArrayList<User> editUsers = users;

现在我已经创建了适配器对象并将静态用户发送到适配器。

ListView users_listview = (ListView)editGroupUsersDialog.findViewById(R.id.user_listView);
EditGroupUsersAdapter edit_group_users_adapter = new EditGroupUsersAdapter(
                    mcontext, edit_group_users);
users_listview.setAdapter(edit_group_users_adapter);

现在,当用户选中或取消选中对话框中的任何项目时,我就会在bean类用户中设置该项目的状态。

checkbox.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                    // add this line too for getting position of clicked
                    int pos = (Integer) v.getTag();
                    Log.v("Position is:", ""+pos);  
                    Log.v("Befoer checkbox status is:", ""+GroupsAdapter.edit_group_users.get(position).isSelected());
                if(!GroupsAdapter.edit_group_users.get(pos).isSelected()) {                     
                    //set the value to true in the user bean
                    GroupsAdapter.edit_group_users.get(pos).setSelected(true);
                    //checkbox.setChecked(true);
                } else {
                    //set the value to false in the user bean
                    GroupsAdapter.edit_group_users.get(pos).setSelected(false);
                    //checkbox.setChecked(false);
                }                                            
            } 
        });

这里我只更改静态用户变量中的状态。即 GroupsAdapter.edit_group_users ,其类型为 ArrayList

ArrayList 类型的非静态变量用户中的对象也在发生变化。

我不知道我在这里做错了什么。

我采用** ArrayList 类型的另一个静态变量的主要目的是存储修改后的用户对象。但我不想更改用户变量中可用的原始用户。

请告诉我如何解决我的问题。

感谢。

1 个答案:

答案 0 :(得分:0)

您的静态和非静态Arraylist都引用list of user

现在对某些用户A说,你将其状态从X更改为Y.然后,此更改将反映到两个Arraylist,因为两个Arraylist都是pointing to个相同的对象,并且您正在更改{{1} }。