Android - 循环收集所有 editText 值

Android - Loop to collect all editText values

我有大约 50 个 EditText 字段,我想使用循环获取它们的值。如下所示单独获取值可以正常工作:

    SharedPreferences settings = getSharedPreferences(filename, 0);
    SharedPreferences.Editor editor = settings.edit();
    editor.clear(); //not sure if this is required

    final EditText t1 = (EditText) findViewById(R.id.text1Value);
    String T1 = t1.getText().toString();
    editor.putstring("text1",T1);

    final EditText t2 = (EditText) findViewById(R.id.text2Value);
    String T2 = t2.getText().toString();
    editor.putstring("text2", T2);

   ................................ and so on till EditText t50.

我已尝试通过下面的循环实现此目的,但无法正常工作。

       for(int x=1; x<50; x++) 
    {
        EditText et[x] = (EditText) findViewById(R.id.text[x]Value);
        String t[x] = et[x].getText().toString();
        String Ref = "text" + x;
        editor.putString(Ref, t[x]);
    }

您可以通过创建文本视图 ID 的数组并循环遍历该数组来尝试此操作。 试试这个:

int[] ids = new int[]{R.id.text1Value,R.id.text2Value,R.id.text3Value};//and so on

int i =1;
for(int id : ids){
    EditText t = (EditText) findViewById(id);
    String Ref = "text" + i;
    editor.putString(Ref, t.getText().toString());
  i++;
}

如果我假设您在名为 ll 的布局中拥有所有这些 EditText(应该也适用于 Layout 以外的结构,例如 ViewGroup 等):

ArrayList<String> values = new ArrayList<String>();
for (int i = 0; i < ll.getChildCount(); i++) {
    if (ll.getChildAt(i) instanceof EditText) {
        EditText et = (EditText)ll.getChildAt(i);
        values.add(et.getText().toString());
    }
}

我的 Android 有点生疏,如果有什么问题,我们深表歉意,但无论如何应该给你大致的想法

int[] ids = new int[]{R.id.text1Value,R.id.text2Value,R.id.text3Value};//and so on

int i =1;
for(int id : ids){
    EditText t = (EditText) findViewById(id);
    String Ref = "text" + i;
    editor.putString(Ref, t.getText().toString());
  i++;
}

private void clearScreen() {
    int[] _ids = null;

    _ids = new int[]{R.id.etIdTAtividade, R.id.etNomeTAtividade, R.id.etNmAtividade};

    for (int i = 0; i < (_ids.length); i++) {
        EditText t = (EditText) findViewById(_ids[i]);
        t.setText("");
    }
}