当我使用 onRetainCustomNonConfigurationInstance 保存包含在我的自定义 EditTexts 中的文本时,在我旋转设备后,最后一个 EditText 中包含的文本被复制到目标布局中的所有其他文本。
在用断点调试时,我发现所有的文本值一直都是正确的。但是在更改完成后,所有 EditText 都会显示相同的文本(来自最后一个的文本),并且焦点将分配给布局中的第一个。
我在最简单的项目中复制了这种行为。我尝试了 android API 级别 24 和 28。
这种行为来自哪里,我该如何解决?
主活动.java :
public class MainActivity extends AppCompatActivity {
private ArrayList<CustomEdit> editList=new ArrayList<CustomEdit>();
private LinearLayout layout;
private Button addButton;
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addButton=findViewById(R.id.add_button);
layout = findViewById(R.id.layout);
addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
addEdit();
}
});
CustomSave data = (CustomSave)getLastCustomNonConfigurationInstance();
if(data==null) return;
for(int i = 0; i<data.texts.size();i++){
addEdit(data.texts.get(i));
}
}
@Override
public Object onRetainCustomNonConfigurationInstance() {
CustomSave data = save();
return data;}
private CustomSave save(){
ArrayList<String> texts = new ArrayList<String>();
for(int i =0; i<editList.size(); i++)
texts.add(editList.get(i).getText());
return new CustomSave(texts);}
/**
* Create a new custom EditText with hint
*/
private void addEdit(){
CustomEdit newEdit = new CustomEdit(this,editList.size());
layout.addView(newEdit,editList.size());
editList.add(newEdit);}
}
aluckdog
湖上湖
相关分类