두 가지 전략으로 객체를 "복제"했습니다. CloneConstructor 및 복제 메서드입니다. (코드 아래) 복제 된 개체를 편집 한 후 "원본"개체도 편집됩니다. 내가 뭘 잘못 했니?java/android : 복제/복제 후에도 객체 편집
내 사용자 지정 개체
public class FormData {
HashMap<String, Object> values;
String stgFormInstanceId, requestId, stgFormDatenTransfer;
// Constructor for creating data with WebService
public FormData(SoapObject so, StgForm form) {....}
// Constructor for creating new data
public FormData() {....}
// clone Constructor
public FormData(FormData oldData) {
this.requestId = oldData.requestId;
this.stgFormDatenTransfer = oldData.stgFormDatenTransfer;
this.stgFormInstanceId = oldData.stgFormInstanceId;
this.values = oldData.values;
this.toString();
}
// Clone Method
public FormData cloneFormData() {
FormData newData = new FormData();
newData.requestId = this.requestId;
newData.stgFormDatenTransfer = this.stgFormDatenTransfer;
newData.stgFormInstanceId = this.stgFormInstanceId;
newData.values = this.values;
newData.toString();
return newData;
}
public void addValue(String key, Object value) {
this.values.put(key, value);
}
}
내 활동 :
public class DetailActivity extends ActionBarActivity implements
ActionBar.TabListener {
private static HashMap<String, StgField> fields;
private ActionBar actionBar;
private FormData data;
private FormData editedData;
private String instanceId, requestId;
private ViewPager viewPager;
private TabsPagerAdapter mAdapter;
private static ViewMode viewMode;
private static ArrayList<EditText> editTextList;
private StgForm currentForm;
private Context context;
private FormData editedData2;
private FormData editedData3;
@Override
protected void onCreate(Bundle savedInstanceState) {
...
data = ....;
}
private void editTicket() {
setViewMode(ViewMode.edit);
editedData2 = new FormData(data);
editedData3 = data.cloneFormData();
setEditabilityOfFields(fields, true);
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
private void saveTabValues(int position) {
ArrayList<StgField> fields = getFieldsOfTAB(position);
for (StgField field : fields) {
View view = field.getViewItem();
if (view instanceof EditText) {
EditText et = (EditText) view;
String fieldName=field.getFieldName();
Editable value = et.getText();
String s = value.toString();
try {
editedData2.addValue(fieldName,
s);
} catch (Exception e) {}
try {
editedData3.addValue(fieldName,
s);
} catch (Exception e) {}
}
}
System.out.println(data.toString());
System.out.println("-------------");
System.out.println(editedData2.toString());
System.out.println("-------------");
System.out.println(editedData3.toString());
}
}
이제 내 활동에() editTicket() 다음 saveTABvalues을 호출 한 후, 세 개의 객체 데이터/editData2/editData3은 같습니다. 이 editData2 및 editData3에 대한 확인,하지만 난 ... "데이터"도 변경 이유를 이해 당신의 도움 당신은 공공 FormData에서 "데이터"에서 데이터를 전송하는
답장을 보내 주셔서 감사합니다.하지만 나는 undestand를 사용하지 않습니다. 공용 FormData cloneFormData()에서 새 객체를 만들고 실제 값으로 채우고 반환합니다. public FormData (FormData oldData) 생성자가 자체적으로 새 객체를 생성하지 않습니까? 내 말은, 그것의 생성자는 ... –