2014-10-20 2 views
0

idI am разрабатывает приложение в Android, в макете я использую более 20 EditText. Для того, чтобы, уменьшить размер моего кодирования я пытался реализовать EditText в массиве .so, помочь мне с тем, как реализовать EditText в массиве, а также, как я должен назвать EditText в файле XML, чтобы использовать это как массив.Android: массив EditText

Я пытался реализовать этот код, но это не работает,

EditText ссылка в файле Java EditText [] et1 = новый EditText [20];

и положить это в цикл,

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

но затмение не может должным образом решить EditText [я].

скажите мне Как правильно создать массив EditText в моем XML, так что он признан

ответ

0

вы должны создать EditText programaticaly, как показано ниже: -

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); 
    } 
} 

Пожалуйста, дайте мне знать, если он работает для вас или нет:): -

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, содержащий все EditTexts (LinearLayout, например)

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. Оставь это.

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 для этого примера, но вы можете использовать любой макет.

Смежные вопросы