【问题标题】:How to getText the multiple EditText value in android using For Loop如何使用 For Loop 在 android 中获取多个 EditText 值
【发布时间】:2014-02-25 12:43:41
【问题描述】:

在我的应用程序中,我有 10 个 Edittext 和 10 个 TextView

我已经为 EditText 和 TextView 创建了实例

String[] messageText=new String[10];
String[] messageEdit=new String[10];
TextView oTextView1 = (TextView) findViewById(R.id.Tab_common1_EditText);
    TextView oTextView2 = (TextView) findViewById(R.id.Tab_common2_EditText);
    TextView oTextView3 = (TextView) findViewById(R.id.Tab_common3_EditText);
    TextView oTextView4 = (TextView) findViewById(R.id.Tab_common4_EditText);
    TextView oTextView5 = (TextView) findViewById(R.id.Tab_common5_EditText);
    TextView oTextView6 = (TextView) findViewById(R.id.Tab_common6_EditText);
    TextView oTextView7 = (TextView) findViewById(R.id.Tab_common7_EditText);
    TextView oTextView8 = (TextView) findViewById(R.id.Tab_common8_EditText);
    TextView oTextView9 = (TextView) findViewById(R.id.Tab_common9_EditText);
    TextView oTextView10 = (TextView) findViewById(R.id.Tab_common10_EditText);

    EditText oEditTextHiden1 = (EditText) findViewById(R.id.Tab_Hidencommon1_EditText);
    EditText oEditTextHiden2 = (EditText) findViewById(R.id.Tab_Hidencommon2_EditText);
    EditText oEditTextHiden3 = (EditText) findViewById(R.id.Tab_Hidencommon3_EditText);
    EditText oEditTextHiden4 = (EditText) findViewById(R.id.Tab_Hidencommon4_EditText);
    EditText oEditTextHiden5 = (EditText) findViewById(R.id.Tab_Hidencommon5_EditText);
    EditText oEditTextHiden6 = (EditText) findViewById(R.id.Tab_Hidencommon6_EditText);
    EditText oEditTextHiden7 = (EditText) findViewById(R.id.Tab_Hidencommon7_EditText);
    EditText oEditTextHiden8 = (EditText) findViewById(R.id.Tab_Hidencommon8_EditText);
    EditText oEditTextHiden9 = (EditText) findViewById(R.id.Tab_Hidencommon9_EditText);
    EditText oEditTextHiden10 = (EditText) findViewById(R.id.Tab_Hidencommon10_EditText);

现在我需要获取所有 TextView getText() 和 EditText getText()

我尝试了一些方法,但它不起作用

 for (int i = 0; i < 10; i++) {

        messageText[i] = (oTextView+i).getText().toString();//it says oTextView cannot be resolved to a variable
        messageEdit[i] = (oEditTextHiden+i).getText().toString();
      }
      Log.i("message", "message :"+Arrays.deepToString(messageText)+" "+Arrays.deepToString(messageEdit));

【问题讨论】:

  • 将所有 oTextView 放在一个 List&lt;TextView&gt; 上并使用它
  • 您必须创建两个数组列表,一个用于文本视图,另一个用于编辑文本,然后使用它。
  • 可以给我样品吗
  • 尝试将(oTextView+i)更改为("oTextView"+i)
  • @gilonm 我试过了,还是不行

标签: android android-edittext textview arrays


【解决方案1】:

存储 EditText 的 id 并循环遍历它们,因为 View id 是整数,您可以像这样轻松地做到这一点:

ArrayList<String> values = new ArrayList<String>();
int[] ids = new int[]{R.id.editText1,R.id.editText2,R.id.editText3};//and so on

for(int id : ids){
    EditText t = (EditText) findViewById(id);
    values.add(t.getText().toString());
}

或者,如果您只想要文本并且不想对 EditText 视图本身做任何其他事情,您可以将其放在一行中:

for(int id : ids) values.add(((EditText)findViewById(id)).getText().toString());

【讨论】:

  • 这就是我所说的! +1 向上
  • 你也可以使用类似:EditText text = (EditText) getActivity().findViewById(getResources().getIdentifier("generalname" + number, "id", context.getPackageName()));
  • @Ayoub 根据文档:注意:不鼓励使用此功能。按标识符检索资源比按名称检索资源效率更高。
  • 您缺少一个括号。应该是:values.add(t.getText().toString());
【解决方案2】:

像这样在数组中添加所有 TextView 和 EdiText

TextView[] oTextView = { oTextView1, oTextView2, oTextView3,
            oTextView4, oTextView5, oTextView6, oTextView7, oTextView8,
            oTextView9, oTextView10 };

EditText[] oEditTextHiden = { oEditTextHiden1, oEditTextHiden2,
            oEditTextHiden3, oEditTextHiden4, oEditTextHiden5,
            oEditTextHiden6, oEditTextHiden7, oEditTextHiden8,
            oEditTextHiden9, oEditTextHiden10 };

那么getText()应该是这个样子

    for (int i = 0; i < 10; i++) {

        messageText[i] = oTextView[i].getText().toString();
        messageEdit[i] = oEditTextHiden[i].getText().toString();
    }

【讨论】:

    【解决方案3】:
    String[] messageText=new String[10];
    String[] messageEdit=new String[10];
    TextView[] textViews = new TextView[10];
    textViews[0] = (TextView) findViewById(R.id.Tab_common1_EditText);
    textViews[1] = (TextView) findViewById(R.id.Tab_common2_EditText);
    textViews[2] = (TextView) findViewById(R.id.Tab_common3_EditText);
    textViews[3] = (TextView) findViewById(R.id.Tab_common4_EditText);
    textViews[4] = (TextView) findViewById(R.id.Tab_common5_EditText);
    textViews[5] = (TextView) findViewById(R.id.Tab_common6_EditText);
    textViews[6] = (TextView) findViewById(R.id.Tab_common7_EditText);
    textViews[7] = (TextView) findViewById(R.id.Tab_common8_EditText);
    textViews[8] = (TextView) findViewById(R.id.Tab_common9_EditText);
    textViews[9] = (TextView) findViewById(R.id.Tab_common10_EditText);
    
    EditText[] editTexts = new EditText[10];
    editTexts[0] = (EditText) findViewById(R.id.Tab_Hidencommon1_EditText);
    editTexts[1] = (EditText) findViewById(R.id.Tab_Hidencommon2_EditText);
    editTexts[2] = (EditText) findViewById(R.id.Tab_Hidencommon3_EditText);
    editTexts[3] = (EditText) findViewById(R.id.Tab_Hidencommon4_EditText);
    editTexts[4] = (EditText) findViewById(R.id.Tab_Hidencommon5_EditText);
    editTexts[5] = (EditText) findViewById(R.id.Tab_Hidencommon6_EditText);
    editTexts[6] = (EditText) findViewById(R.id.Tab_Hidencommon7_EditText);
    editTexts[7] = (EditText) findViewById(R.id.Tab_Hidencommon8_EditText);
    editTexts[8] = (EditText) findViewById(R.id.Tab_Hidencommon9_EditText);
    editTexts[9] = (EditText) findViewById(R.id.Tab_Hidencommon10_EditText);
    
    for (int i = 0; i < 10; i++) {
        messageText[i] = textViews[i].getText().toString();
        messageEdit[i] = editTexts[i].getText().toString();
      }
      Log.i("message", "message :"+Arrays.deepToString(messageText)+" "+Arrays.deepToString(messageEdit));
    

    【讨论】:

      【解决方案4】:

      最好的方法是使用与 textview 关联的标签。

      例如:

      在 Xml 中你需要创建 TextView 和 editText 如下:

      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      android:id="@+id/llParent"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:orientation="vertical" >
      
      <TextView
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:tag="tv1"
          android:text="TextView1" />
      
      <EditText
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:tag="et1"
          android:text="EditText1" />
      
      <TextView
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:tag="tv2"
          android:text="TextView2" />
      
      <EditText
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:tag="et2"
          android:text="EditText2" />
      
        ===== Similarly 10 Textviews and EditTexts========
      
      </LinearLayout>
      

      在代码中:

      String[] messageText = new String[10];
      String[] messageEdit = new String[10];
      
      LinearLayout llParent = (LinearLayout) findViewById(R.id.llParent);
      
          for (int i = 1; i <= 10; i++) {
              messageText[i - 1] = ((TextView) llParent.findViewWithTag("tv" + i))
                      .getText().toString();
              messageEdit[i - 1] = ((EditText) llParent.findViewWithTag("et" + i))
                      .getText().toString();
          }
      

      快乐编码.... :-)

      【讨论】:

        【解决方案5】:

        试试这样:-

            ArrayList<TextView> arrayListTextViews = new ArrayList<TextView>();
            TextView oTextView1 = (TextView) findViewById(R.id.Tab_common1_EditText);
            TextView oTextView2 = (TextView) findViewById(R.id.Tab_common2_EditText);
            TextView oTextView3 = (TextView) findViewById(R.id.Tab_common3_EditText);
            TextView oTextView4 = (TextView) findViewById(R.id.Tab_common4_EditText);
            TextView oTextView5 = (TextView) findViewById(R.id.Tab_common5_EditText);
            TextView oTextView6 = (TextView) findViewById(R.id.Tab_common6_EditText);
            TextView oTextView7 = (TextView) findViewById(R.id.Tab_common7_EditText);
            TextView oTextView8 = (TextView) findViewById(R.id.Tab_common8_EditText);
            TextView oTextView9 = (TextView) findViewById(R.id.Tab_common9_EditText);
            TextView oTextView10 = (TextView) findViewById(R.id.Tab_common10_EditText);
            arrayListTextViews.add(oTextView1);
            arrayListTextViews.add(oTextView2);
            arrayListTextViews.add(oTextView3);
            arrayListTextViews.add(oTextView4);
            arrayListTextViews.add(oTextView5);
            arrayListTextViews.add(oTextView6);
            arrayListTextViews.add(oTextView7);
            arrayListTextViews.add(oTextView8);
            arrayListTextViews.add(oTextView9);
            arrayListTextViews.add(oTextView10);
        

        然后在循环中从 arrayListTextViews 访问文本视图。 也对您的 Edittext 执行相同操作。

        【讨论】:

          【解决方案6】:

          最好的方法是在Resources 类中使用getIdentifier 方法

          类似的东西

          messageText[i] = (TextView) getActivity().findViewById(getResources().getIdentifier("Tab_common"+i+"_EditText", "id", context.getPackageName()));
          messageEdit[i] = (EditText) getActivity().findViewById(getResources().getIdentifier("Tab_Hidencommon"+i+"_EditText", "id", context.getPackageName()));
          

          【讨论】:

          • getIdentifier 注意:不鼓励使用此函数。按标识符检索资源比按名称检索资源效率更高。 (来自文档)
          • 我知道它的效率较低,但它的 1 次初始化不是问题,并且避免了跟踪所有这些 ID。
          猜你喜欢
          • 2017-09-09
          • 1970-01-01
          • 2015-12-15
          • 2021-03-12
          • 1970-01-01
          • 1970-01-01
          • 2015-05-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多