Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 保存临时arraylist以在适配器中使用_Java_Android_Arraylist_Android Adapter - Fatal编程技术网

Java 保存临时arraylist以在适配器中使用

Java 保存临时arraylist以在适配器中使用,java,android,arraylist,android-adapter,Java,Android,Arraylist,Android Adapter,我有个问题。 在删除某些元素之前,我需要保存一个ArrayList。 因此,我使用附加的“users opied”ArrayList和“users”ArrayList的副本。 但它不起作用,我现在不知道为什么。 删除“users”ArrayList中的某些元素后,该操作也会影响“usersCopied”ArrayList。 如何解决这个问题? 我想保存初始列表,而不是更改它,我将使用该列表恢复初始数据。 谢谢 公共类SelectUser扩展了ActionBarActivity实现了View.On

我有个问题。 在删除某些元素之前,我需要保存一个
ArrayList
。 因此,我使用附加的“users opied”
ArrayList
和“users”ArrayList的副本。 但它不起作用,我现在不知道为什么。 删除“users”
ArrayList
中的某些元素后,该操作也会影响“usersCopied”
ArrayList
。 如何解决这个问题? 我想保存初始列表,而不是更改它,我将使用该列表恢复初始数据。 谢谢

公共类SelectUser扩展了ActionBarActivity实现了View.OnClickListener{
公共静态ArrayList用户;
publicstaticarraylistuserscopied;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
users=newarraylist();
//用户列表的副本,未更改
usersCopied=null;
mCallback=新建LoaderManager.LoaderCallbacks(){
@凌驾
公共加载器onCreateLoader(int-id,Bundle-args){
progressDialog.show();
返回新的GetUser(getApplicationContext());
}
@凌驾
public void onLoadFinished(加载程序、ArrayList数据){
用户=数据;
适配器=新的MyListAdapter(用户);
setAdapter(适配器);
//复制数据
if(usersCopied==null){
Log.d(Constants.tag,“未复制!”);
copyData(数据);
}否则
{
Log.d(Constants.tag,“已复制!”);
}
}
};
getSupportLoaderManager();
}
公共void copyData(ArrayList数据){
usersCopied=newarraylist(数据);
}
公共类MyListAdapter扩展了BaseAdapter{
ArrayList用户;
公共MyListAdapter(ArrayList用户){
this.users=用户;
}
@凌驾
public void notifyDataSetChanged(){
super.notifyDataSetChanged();
//这里有个问题
//从“用户”列表中删除项目后,列表中的“UsersCopy”也删除了该元素。为什么?
Log.d(Constants.tag、String.valueOf(“MyListAdapter users.size:+users.size());
Log.d(Constants.tag、String.valueOf(“MyListAdapter usersCopied.size:+usersCopied.size());
}
}
@凌驾
公共void onClick(视图v){
开关(v.getId()){
案例R.id.B传感器:
sortData();
打破
}
}
//我只想删除列表用户中的元素
//从“UserCopy”列表还原初始数据
//以及从“用户”列表中删除
公共无效排序数据(){
adapter.users=usersCopied;
适配器。用户。删除(0);
adapter.notifyDataSetChanged();
}
}

好吧,我也遇到过同样的问题。 1.尝试创建另一个临时arraylist。 2.临时数据=数据; 3.然后执行users.addall(列表)


希望这有帮助。

尝试使用
Collections.copy(目标、源)

现在您仍在引用用户数据。 为确保不再引用,请更改copyData方法:

public void copyData(ArrayList<com.taxizauglom.utils.User> data) {
    usersCopied = new ArrayList<com.taxizauglom.utils.User>();
    for (User user : data){
        //Use the data from this loop's user to create a new one.
        usersCopied.add(new User(....)); 
    }
}
public void copyData(ArrayList数据){
usersCopied=newarraylist();
for(用户:数据){
//使用此循环用户的数据创建一个新循环。
usersCopied.add(新用户(..);
}
}
这似乎是不必要的,但除非您创建新的用户对象,否则您将保持引用的灵活性。

试试这个

创建新的数组列表,并使用addAll方法将元素从原始arraylist复制到新的arraylist。这将解决您的问题

public void copyData(ArrayList<com.taxizauglom.utils.User> data) {
    usersCopied = new ArrayList<com.taxizauglom.utils.User>();
    usersCopied.addAll(data);
}
public void copyData(ArrayList数据){
usersCopied=newarraylist();
usersCopied.addAll(数据);
}

为要保存的项目创建一个单独的类 e、 你想省钱吗

1)ID
2) 名字
3) 学校

而不是创建一个类

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
,其类型为
ShowItems
,如下所示

  ArrayList<ShowItems> products = new ArrayList<ShowItems>();
如果您想在某个位置获取数据,请像

String strID = products.get(position).ID;
String strNAME = products.get(position).NAME;
String strSCHOOL = products.get(position).SCHOOL;
是否要删除特定位置的项目。。。? 这样做没问题

products.remove(position);
谢谢你的建议! 我发现了一个麻烦

就在那里:

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();
}
public void sortData(){
//这里我指的是临时列表,并且一直在更改它。
adapter.users=usersCopied;
//而不是我不得不使用这个:
adapter.users=new ArrayList(usersCopied);
适配器。用户。删除(0);
adapter.notifyDataSetChanged();
}

您可以只使用作为参数的构造函数collection
new ArrayList(collection…)
虽然这可能会回答问题,但您应该解释一下为什么此代码会解决OP的问题,而不是只给出代码的答案。只允许使用代码回答,但包括注释和解释将改进它。代码对您来说是自我解释的,我相信,也许是这样,但对OP来说——不一定,这就是为什么首先要问这个问题。请注意,我看到您的答案的唯一原因是其他用户已将其标记为VLQ queue.Collections.copy(destination,source);将进一步优化它。因为你需要迭代你的源代码列表。
products.remove(position);
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();
}