Android:EditText数组

时间:2014-10-20 04:07:57

标签: java android

我正在开发android中的应用程序,在布局中我使用的是20多个 EditText 。为了减少编码的大小,我试图在数组中实现 EditText 。所以,帮助我如何在数组中实现 Edittext 以及我应该如何在XML文件中命名 EditText 以将其用作数组。

我尝试实现此代码,但这不起作用,

java文件中的edittext引用     EditText [] et1 = new EditText [20];

并将其置于for循环中,

for(i=0;i<20;i++)
{
et1[i]=(EditText)findViewById(R.id.edittext[i]);
}

但是eclipse无法正确解析edittext [i]。

告诉我如何在我的xml中正确创建一个EditText数组,以便识别它

5 个答案:

答案 0 :(得分:1)

您可以这样做:

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

for(int i = 0; i < rootLayout.getChildCount(); i++) {
    if(rootLayout.getChildAt(i) instanceof EditText) {
        editTextList.add( (EditText) rootLayout.getChildAt(i));
    }
}

其中rootLayout是包含所有View的{​​{1}}(例如,EditTexts

答案 1 :(得分:0)

您必须以编程方式创建edittext,如下所示: -

private EditText[] mEditTextPlayers;

public void goButtonClicked(View view) {
    maalContainer.removeAllViews();
    int numPlayers = Integer.parseInt((String) numberOfPlayers.getSelectedItem());

    LayoutInflater inflater = LayoutInflater.from(view.getContext());
    mEditTextPlayers = new EditText[numPlayers];

    for (int i = 0; i < numPlayers; i++) {
        //Pass the parent as the second parameter to retain layout attributes
        mEditTextPlayers[i] = inflater.inflate(R.layout.player_entry_item, maalContainer, false);
        maalContainer.addView(dynamicEntryView);
    }
}

如果它对你有用,请告诉我:): -

答案 2 :(得分:0)

我将举几个例子。首先,这条线是不正确的:

et1[i]=(EditText)findViewById(R.Layout.edittext[i]);

这不是findViewById()方法获取参数的方式。您无法将R.id附加到数组中。

现在,您可以执行以下操作:id[] = new id[] {R.Layout.editTextOne, R.Layout.editTextTwo}

当我们坐下来思考这个问题时,我们可能会意识到它会采取与执行以下操作一样多的代码(或更多):

    EditText[] editTextArray = new EditText[] {
            (EditText) findViewById(R.id.oneEditText),
            (EditText) findViewById(R.id.twoEditText),
            (EditText) findViewById(R.id.threeEditText),
            (EditText) findViewById(R.id.fourEditText),
            (EditText) findViewById(R.id.fiveEditText),
            (EditText) findViewById(R.id.sixEditText),
            (EditText) findViewById(R.id.sevenEditText),
            (EditText) findViewById(R.id.eightEditText),
            (EditText) findViewById(R.id.nineEditText),
            (EditText) findViewById(R.id.zeroEditText) };

    for (int x = 0; x < editTextArray.length; x++) {
        editTextArray[x].setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
            // DO stuff here........................
            }
        });
    }

最后,请勿更改xml文件。留下吧。

答案 3 :(得分:0)

首先将您的所有20个EditText封装在布局中,并为该布局提供如下内容:

<LinearLayout
    android:id="@+id/holder"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <EditText android:id="@+id/edittext1"/>
    <EditText android:id="@+id/edittext2"/>
    <EditText android:id="@+id/edittext3"/>
    ...
    <EditText android:id="@+id/edittext20"/>
</LinearLayout>

现在在您的活动中执行以下操作:

//Global variable
int index = 0;
EditText[] editTextArray = new EditText[20];

//inside activity
LinearLayout holder = (LinearLayout) findViewById(R.id.holder)
...
for(int i=0; i<holder.getChildCount(); i++){
    View view = holder.getChildAt(i);
    if(view  instanceof EditText){
        editTextArray[index++] = view;
    }
}

我在本例中使用了LinearLayout,但您可以使用任何布局。

答案 4 :(得分:0)

这是一个可行的解决方案。假设您有一个包含9个EditText小部件的布局(id =“ R1”)。以下代码将设置一个数组,使您可以访问数组中的那些小部件:

    EditText[] etArray = new EditText[9];
    int index = 0;
    //store the EditText fields in an array
    LinearLayout LL = findViewById(R.id.R1);
    for(int i = 0; i < LL.getChildCount(); i++) {
        View v = LL.getChildAt(i);
        if (v instanceof EditText) {
            //the following is the crucial line missing from the other answers
            etArray[index++] = ((EditText) v)
        }
    }

现在,您可以像下面的示例一样访问数组的元素:

    for(int i = 0; i < 9; i++) {
        etArray[i].setText(Integer.toString(i));
    }