我正在开发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数组,以便识别它
答案 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));
}