我很困惑。
我有一个包含TextView和EditText的布局(LinearLayout)。 在我的代码的某处,我创建(以编程方式)RelativeLayout并将其中的几个LinearLayout推入其中。我为它们中的每一个设置了TextView和EditText的ID和值。
问题在于我改变屏幕方向。所有EditText控件都获得相同的值(来自上一个EditText)。如果我设置断点一切似乎都没问题。我甚至在调用setContentView之前检查了所有元素,并且所有值看起来都很好。
有什么想法吗?
以下是代码的相关部分:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
csWgs84 = getCoordinateSystem();
wgs84C = getCoordinates();
sView = new ScrollView(this);
layout = getLayoutInflater().inflate(R.layout.location_calculator, null);
View control1 = getLayoutInflater().inflate(R.layout.text_edit, null);
control1.setId(1);
TextView title1 = (TextView) control1.findViewById(R.id.title);
title1.setText(csWgs84.axisInfo.yAxisAbbreaviation + " [°] :");
EditText value1 = (EditText) control1.findViewById(R.id.input);
value1.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
value1.setText(cutValue(RSimpleFormatter.formatNumber(wgs84C.y, 1, 7, '.'), 12));
RelativeLayout.LayoutParams viewLayoutParams1 = new RelativeLayout.LayoutParams
(RelativeLayout.LayoutParams.FILL_PARENT,RelativeLayout.LayoutParams.WRAP_CONTENT );
viewLayoutParams1.addRule(RelativeLayout.BELOW, group.getId());
((RelativeLayout) layout).addView(control1, viewLayoutParams1);
View control2 = getLayoutInflater().inflate(R.layout.text_edit, null);
control2.setId(2);
TextView title2 = (TextView) control2.findViewById(R.id.title);
title2.setText(csWgs84.axisInfo.xAxisAbbreaviation + " [°] :");
EditText value2 = (EditText) control2.findViewById(R.id.input);
value2.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
value2.setText(cutValue(RSimpleFormatter.formatNumber(wgs84C.x, 1, 7, '.'), 12));
RelativeLayout.LayoutParams viewLayoutParams2 = new RelativeLayout.LayoutParams
(RelativeLayout.LayoutParams.FILL_PARENT,RelativeLayout.LayoutParams.WRAP_CONTENT );
viewLayoutParams2.addRule(RelativeLayout.BELOW, control1.getId());
((RelativeLayout) layout).addView(control2, viewLayoutParams2);
sView.addView(layout, scrollViewLayoutParams);
setContentView(sView);
}
答案 0 :(得分:8)
我遇到了同样的问题。我不知道为什么会这样;它发生在我的一个活动中,而不是在我认为几乎相同的另一个活动中。我没有广泛调查它。
但是,我想出了一个解决方法:在onResume()
而不是在onCreate()
中填充EditTexts。(我也尝试在onStart中填充它们,但之后我我也有同样的错误。)我希望这对你或其他读这个帖子的人都有用。
答案 1 :(得分:2)
如果(通常非常聪明)默认的onPause()方法处理得不好,你的活动被推送到内存并从中重新加载,那么你需要覆盖它。
使用onPause将以编程方式创建的字段的值保存在一个包中。在你的onCreate方法中检查是否存在Bundle并从中创建你的视图。
答案 2 :(得分:1)
小心参考。也许你正在“以编程方式”创建所有的EditText,然后只修改最后一次。
发布代码会很有帮助。
答案 3 :(得分:1)
答案 4 :(得分:0)
不确定是否是这种情况,但我能够通过删除
解决此问题android:textIsSelectable="true"
来自我的XML布局。
答案 5 :(得分:0)
潜在的问题是,自定义布局中的视图(多次膨胀和添加)具有相同的ID(R.id.title和R.id.input)。当Android保存状态时,由于ID相同,每一个都会覆盖前一个。
您可以做的是定义一些唯一的IDs which are generated by Android并以编程方式将其分配给字段。