我有问题。
在我删除一些元素之前,我需要保存ArrayList
。
因此我使用额外的"用户选择" ArrayList
与"用户"重复数组列表。
但它不起作用,我现在不知道为什么。
删除"用户"中的一些元素后ArrayList
,该操作也会影响" usersCopied" ArrayList
。
如何摆脱这个问题?
我想保存初始列表,而不是更改它,我将用于恢复初始数据的列表。
谢谢!
public class SelectUser extends ActionBarActivity implements View.OnClickListener {
public static ArrayList<com.taxizauglom.utils.User> users;
public static ArrayList<com.taxizauglom.utils.User> usersCopied;
@Override
protected void onCreate(Bundle savedInstanceState) {
users = new ArrayList<>();
// copy of users list, not changing
usersCopied = null;
mCallback = new LoaderManager.LoaderCallbacks<ArrayList<com.taxizauglom.utils.User>>() {
@Override
public Loader<ArrayList<com.taxizauglom.utils.User>> onCreateLoader(int id, Bundle args) {
progressDialog.show();
return new GetUser(getApplicationContext());
}
@Override
public void onLoadFinished(Loader<ArrayList<com.taxizauglom.utils.User>> loader, ArrayList<com.taxizauglom.utils.User> data) {
users = data;
adapter = new MyListAdapter(users);
listUsers.setAdapter(adapter);
// Copying data
if (usersCopied == null){
Log.d(Constants.tag, "Not copied!");
copyData(data);
} else
{
Log.d(Constants.tag, "Already copied!");
}
}
};
getSupportLoaderManager().initLoader(1, null, mCallback).forceLoad();
}
public void copyData(ArrayList<com.taxizauglom.utils.User> data) {
usersCopied = new ArrayList<>(data);
}
public class MyListAdapter extends BaseAdapter {
ArrayList<User> users;
public MyListAdapter(ArrayList<User> users) {
this.users = users;
}
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
// here is a problem
//After removing item from "users" list, in list "usersCopied" also was removed that element. Why?
Log.d(Constants.tag, String.valueOf("MyListAdapter users.size: " + users.size()));
Log.d(Constants.tag, String.valueOf("MyListAdapter usersCopied.size: " + usersCopied.size()));
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnSort:
sortData();
break;
}
}
// I wanna remove element only in list users
//restoring initial data from "userCopied" list
//and removing from "users" list
public void sortData() {
adapter.users = usersCopied;
adapter.users.remove(0);
adapter.notifyDataSetChanged();
}
}
答案 0 :(得分:1)
现在你还在引用用户数据。 为了确保您不再引用,请更改copyData方法:
#StayOpen:hover ~ #AccomodationPanel {
height:300px;
}
似乎没必要,但除非您创建User的新对象,否则您将保持引用。
答案 1 :(得分:0)
好吧我遇到了同样的问题。 1.尝试创建另一个临时arraylist。 2.临时alist =数据; 3.然后执行users.addall(alist)。
希望这有帮助。
答案 2 :(得分:0)
尝试使用Collections.copy(destination, source);
答案 3 :(得分:0)
试试这个
使用方法addAll创建新的数组列表并将元素从原始arraylist复制到新的arleylist,这将解决您的问题。
public void copyData(ArrayList<com.taxizauglom.utils.User> data) {
usersCopied = new ArrayList<com.taxizauglom.utils.User>();
usersCopied.addAll(data);
}
答案 4 :(得分:0)
为要保存的项目创建单独的类 例如你想保存
1) ID
2) Name
3) School
而不是创建一个类
public class ShowItems{
public String ID;
public String NAME;
public String SCHOOL;
public ShowItems(String textID, String textNAME, String textSCHOOL) {
ID = textID;
NAME = textNAME;
SCHOOL = textSCHOOL;
}
}
现在创建一个类似ArrayList
的{{1}}
ShowItems
添加数据
ArrayList<ShowItems> products = new ArrayList<ShowItems>();
如果您想在某个位置获取数据,请执行
products.add("1", "MADDY", "CONVENT SCHOOL");
想要删除特定位置的物品......? 没问题就这样....
String strID = products.get(position).ID;
String strNAME = products.get(position).NAME;
String strSCHOOL = products.get(position).SCHOOL;
答案 5 :(得分:0)
感谢您的建议! 我发现了一个麻烦。
就在那里:
public void sortData() {
//Here i refer to temporary list, and change it all the time.
adapter.users = usersCopied;
//Instead of I had to use this:
adapter.users = new ArrayList<>(usersCopied);
adapter.users.remove(0);
adapter.notifyDataSetChanged();
}