Android 是否可以生成自动保留其状态的“EditText”对列表?
我遇到了一系列令人沮丧的问题。我想要一个明确的解决方案;因此,我将对这个问题给予悬赏 要求Android 是否可以生成自动保留其状态的“EditText”对列表?,android,android-layout,listview,android-listview,android-view,Android,Android Layout,Listview,Android Listview,Android View,我遇到了一系列令人沮丧的问题。我想要一个明确的解决方案;因此,我将对这个问题给予悬赏 要求 生成成对的EditText视图列表,这些视图在方向更改(屏幕旋转)时自动保留其值 EditText对的数量在运行时确定 失败方法:使用ListView 使用具有阵列适配器的列表视图。阵列适配器使用布局生成每对TextView视图。列表视图项的XML可能显示为: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi
EditText
视图列表,这些视图在方向更改(屏幕旋转)时自动保留其值EditText
对的数量在运行时确定ListView
使用具有阵列适配器的列表视图
。阵列适配器使用布局生成每对TextView
视图。列表视图
项的XML可能显示为:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<EditText
android:id="@+id/edit_first"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/edit_second"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
更改方向时,不会保留在编辑文本中输入的值。由于EditText
视图是通过ArrayAdapter
实例化的,因此Android运行时无法自动使用旋转前的最后状态预填充EditText
视图。这意味着我们必须手动保存/恢复用户输入——不符合要求#1
失败方法:使用TableLayout
和TableRow
s
我们可以为每个EditText
对充气一个TableRow
布局,而不是使用ListView
,并将其附加到TableLayout
。因为我们只知道运行时的对数(每个需求2),所以我们必须以编程方式实例化布局。比如:
for (int i = 0; i < numPairs; ++i)
{
TableRow row = (TableRow) View.inflate(this, R.layout.tablerow_pair, null);
table.addView(row);
}
for(int i=0;i
这也无法保留方向更改时的状态。每对EditText
视图与列表视图中的所有其他EditText
视图具有相同的Id
s。这是因为我们为列表中的每个项目实例化了相同的布局;因此,它们都具有相同的Id
s。在轮换时,Android会给每对EditText
值赋予相同的值,因为它们共享相同的Id
重述
那么,有没有办法创建一个EditText
对的列表,这些对在方向改变时自动保持其状态?似乎一定有办法,但研究这个问题很困难,因为它是一个相当专门的用例。如果有人能对这种情况给我一个很好的解释,我会很高兴地奖励一些赏金。您可以使用EditText
小部件,无论您是通过其构造函数还是通过布局膨胀(根据您的第二种策略)创建这些小部件。用于获取不同的视图ID。是否有任何方法可以通过ListView
方法满足这些要求?同时,GenerateView()上的API级别为16,这使得它实际上毫无用处。@mindandsky:“是否有任何方法可以通过ListView方法满足这些要求?”--不太容易,主要是因为可聚焦的小部件和ListView
不能很好地单独使用。“GenerateView()上的API级别为16,这使得它实际上毫无用处”——欢迎您将一组视图ID定义为ID资源并使用它们。
for (int i = 0; i < numPairs; ++i)
{
TableRow row = (TableRow) View.inflate(this, R.layout.tablerow_pair, null);
table.addView(row);
}