У меня проблема. Мне нужно сохранить ArrayList
, прежде чем я удалю некоторые элементы. Поэтому я использую дополнительные «пользователи, оперированные» ArrayList
с дубликатами «users» ArrayList. Но это не работает, я не знаю почему. После удаления некоторых элементов в «users» ArrayList
это действие также влияет на «usersCopied» ArrayList
. Как избавиться от этой проблемы? Я хочу сохранить исходный список и не изменять его, этот список я буду использовать для восстановления исходных данных. Спасибо!Сохранение временного arraylist для использования в Adapter
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();
}
}
вы можете просто использовать конструктор, который принимает в качестве параметров коллекции 'новый ArrayList (Collection ....)' – SorryForMyEnglish