我正在开发一个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 类型的另一个静态变量的主要目的是存储修改后的用户对象。但我不想更改用户变量中可用的原始用户。
请告诉我如何解决我的问题。
感谢。
答案 0 :(得分:0)
您的静态和非静态Arraylist都引用list of user
。
现在对某些用户A说,你将其状态从X更改为Y.然后,此更改将反映到两个Arraylist,因为两个Arraylist都是pointing to
个相同的对象,并且您正在更改{{1} }。