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);
    }