1

这是我的代码..我创建了一个动态屏幕,我在 for 循环下生成一个 textview 和 edittext。但是单击按钮后它只获得最后一个输入。我需要获取 editText 的所有输入并且必须通过他们到新屏幕..guyss..plzz 帮帮我。这是我的代码..

            runOnUiThread(new Runnable() {
            public void run() {
                final LinearLayout findViewById = (LinearLayout) findViewById(R.id.dynamicInputs);
                // TextView textView = (TextView) findViewById(R.id.name);
                TextView textView = new TextView(Activity_UserInput.this);
                textView.setText(map.get(KEY_NAME) + " :");
                textView.setTextColor(Color.BLACK);
                textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 17);

                findViewById.addView(textView);

                final EditText editText = new EditText(
                        Activity_UserInput.this);

                editText.setText("");

                editText.setFocusableInTouchMode(true);
                editText.requestFocus();

                findViewById.addView(editText);
                final ArrayList<EditText> allEds = new ArrayList<EditText>();
                allEds.add(editText);


                btn.setOnClickListener(new OnClickListener() {

                    @Override
                    public void onClick(View v) {

                        // it = new Intent(Activity_UserInput.this,
                        // Submition_Activity.class);
                        // it.putExtra("input", arryList);
                        // System.out.println("get the input"
                        // + arryList);

                        String[] string = new String[allEds.size()];

                        for (int i = 0; i < string.length; i++) {
                            string[i] = allEds.get(i).getText().toString();

                        }

                    }
                });

            }
        });
4

4 回答 4

1

在这里,在每次创建的 EditText 的代码数组列表中。所以在启动时初始化 allEds

final ArrayList<EditText> allEds = new ArrayList<EditText>();

然后将 EditText 添加到 arraylist

 final EditText editText = new EditText( Activity_UserInput.this);
             editText.setText("");
     editText.setFocusableInTouchMode(true);
      editText.requestFocus();
    findViewById.addView(editText);
   allEds.add(editText);
于 2013-08-08T11:00:07.583 回答
0

My Layout :

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/mTopLayout" ></LinearLayout>

Within my activity

LinearLayout mLayout = (LinearLayout) findViewById(R.id.mTopLayout);

 ArrayList<EditText> mCheck = new ArrayList<EditText>();


    EditText mEdit = new EditText(MainActivity.this);
    mEdit.setText("");
    mEdit.setFocusableInTouchMode(true);
    mEdit.requestFocus();
    mLayout.addView(mEdit);
    mCheck.add(mEdit);

    EditText mEdit1 = new EditText(MainActivity.this);
    mEdit1.setText("");
    mEdit1.setFocusableInTouchMode(true);
    mEdit1.requestFocus();
    mLayout.addView(mEdit1);
    mCheck.add(mEdit1);

    EditText mEdit2 = new EditText(MainActivity.this);
    mEdit2.setText("");
    mEdit2.setFocusableInTouchMode(true);
    mEdit2.requestFocus();
    mLayout.addView(mEdit2);
    mCheck.add(mEdit2); ......

Within onClick method

String[] st = new String[mCheck.size()];

for(int i=0;i<st.length;i++){
    st[i] = mCheck.get(i).getText().toString(); 
}
Log.i("Recived String", st.length+"");
for(int j=0;j<st.length;j++){
    Log.i(" String", st[j]+""+j);  }

It works fine for me....Please review your layout and let me know.... thanks...

于 2013-08-08T11:24:33.140 回答
0

每次放置时都会创建一个新的 allEdsfinal ArrayList<EditText> allEds = new ArrayList<EditText>();所以 allEds 将只包含一个元素。

尝试在 for 循环之外创建它。

于 2013-08-08T10:47:12.327 回答
0

您只创建了一个编辑文本,并且您只向 allEds 数组列表添加了一个编辑文本。您还声明了 string[] 的大小为 allEds 数组列表的大小。因此,string[] 的长度仅为 1,for 循环只会执行一次。这样,您将只获得一个输入。

如果要创建多个 edittext,请在 for 循环中创建它们。或者,如果您已经在 for 循环下创建它们,请尝试在循环外部声明以下行,而不是在内部声明。

{ArrayList<EditText> allEds = new ArrayList<EditText>();}
于 2013-08-08T10:54:05.307 回答