2017-05-08 37 views
-1

我正在从网络调用中获取状态列表。我正在处理另一个清单。现在,当我从一个列表中删除项目时,同一项目也正在从其他列表中删除。 我无法设置过滤器,因为这个问题。请让我知道该怎么做。删除列表中的项目会反映其他相同类别的列表。为什么?

这是我的代码。

private void getStates() { 
    progressDialog = new ProgressDialog(this); 
    progressDialog.setMessage("Please Wait"); 
    progressDialog.show(); 

    RestApi restApi = RetroSingleton.getInstance().getRestApi(); 
    restApi.getStates() 
      .subscribeOn(Schedulers.newThread()) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribe(new Observer<State2>() { 
       @Override 
       public void onCompleted() { 
        progressDialog.dismiss(); 
       } 

       @Override 
       public void onError(Throwable e) { 
        progressDialog.dismiss(); 
        e.printStackTrace(); 
       } 

       @Override 
       public void onNext(State2 model) { 
        state2 = model; 
        Log.d(Const.TAG, "onNext: " + model.getState().size()); 
        Log.d(Const.TAG, "onNext: " + state2.getState().size()); 

        model.getState().remove(0); //here i remove item 

        Log.d(Const.TAG, "onNext: " + model.getState().size()); 
        Log.d(Const.TAG, "onNext: " + state2.getState().size()); 

        //now size is same! WHY? 
       } 
      }); 
} 

这是我State2.java

public class State2 { 

@SerializedName("error") 
private Boolean error; 
@SerializedName("state") 
private List<State> state; 

public Boolean getError() { 
    return error; 
} 

public void setError(Boolean error) { 
    this.error = error; 
} 

public List<State> getState() { 
    return state; 
} 

public void setState(List<State> state) { 
    this.state = state; 
} 


public class State { 
    @SerializedName("id") 
    private String id; 
    @SerializedName("name") 
    private String name; 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

} 

}

任何帮助,将不胜感激。请让我知道我只是不知道 谢谢

+1

'state2'和'model'引用同一个'State2'对象,因此只有一个列表。 – Eran

+0

state2 =(State2)model.clone();采取克隆没有区别 – xbadal

回答

1

复制状态2的模型数据,并在新的列表只传递列表模型值。

+0

state2 =(State2)model.clone(); – xbadal

+0

取克隆没有区别 – xbadal

+0

拷贝构造函数也没有区别。 – xbadal

1

你不复制State2对象,你只是将它分配给另一个变量。 state2和model指向同一个对象。

你可以试试这个:使用拷贝构造函数

state2 = new State2(); 
state2.setState(new ArrayList<String>(model)); 
相关问题