实现类似于表的UI我遇到了一个非常奇怪的行为。旋转屏幕后,所有行都包含相同的编辑文本字段
这是我的代码:
主要活动:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ViewGroup layout = (ViewGroup) findViewById(R.id.table_layout);
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
addRow(inflater, layout, "A", 0);
addRow(inflater, layout, "B", 1);
addRow(inflater, layout, "C", 2);
}
private void addRow(LayoutInflater inflater, ViewGroup layout, String title, int value) {
View view = inflater.inflate(R.layout.row, null, false);
Row row = (Row) view;
row.setTitle(title);
row.setValue(value);
layout.addView(row);
}
}
主要活动布局:
<LinearLayout xmlns:a="http://schemas.android.com/apk/res/android"
a:layout_width="match_parent"
a:layout_height="wrap_content"
a:layout_gravity="center"
a:orientation="vertical">
<LinearLayout
a:id="@+id/table_layout"
a:orientation="vertical"
a:layout_width="match_parent"
a:layout_height="wrap_content" />
</LinearLayout>
表格行:
public class Row extends LinearLayout {
public Row(Context context) {
super(context);
}
public Row(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setTitle(String title) {
final TextView titleView = (TextView) findViewById(R.id.title);
titleView.setText(title);
}
public void setValue(int i) {
final TextView valueEdit = (TextView) findViewById(R.id.value);
valueEdit.setText("" + i);
}
}
表格行布局:
<?xml version="1.0" encoding="utf-8"?>
<com.anagaf.freqhelper.Row
xmlns:a="http://schemas.android.com/apk/res/android"
a:layout_width="match_parent"
a:layout_height="match_parent"
a:orientation="horizontal">
<TextView
a:id="@+id/title"
style="@style/RangeTitle"
a:layout_marginBottom="@dimen/gap"
a:layout_height="wrap_content"/>
<EditText
a:id="@+id/value"
style="@style/ChannelEdit"/>
</com.anagaf.freqhelper.Row>
应用程序启动后表格看起来没问题:
A 0
B 1
C 2
如果我将屏幕方向更改为横向,则表格将更改为:
A 2
B 2
C 2
看起来最后一行的EditText被重用于所有行。
如果我用TextView替换值EditText - 一切正常
知道发生了什么事吗?
答案 0 :(得分:0)
您正在将ViewGroup inflater.inflate(R.layout.row, null, false);
充气为视图。相反,请将其充气为ViewGroup
,然后使用yourviewgroup.findById(R.id.someview)
获取您要填充的每个元素。
更好的方法是在代码中创建一个新的布局,然后夸大你的模板&#39;布局并从那里实例化每个元素。然后使用创建的布局显示刚刚实例化的元素。
这样,您只需对布局进行一次通气,并将其作为变量传递给每一行,返回一个新布局并将其放入活动的布局中。