2013-04-12 1 views
0

Я начинающий разработчик Android и буду благодарен вам за помощь.Android - доступ к объекту, добавленному после запуска активности

У меня есть активность android, которая создает флажок и EditText, когда пользователь нажимает кнопку. Пользователь может добавить столько флагов/EditTexts, которые ему нравятся.

Это XML-файл представления, который добавляется к деятельности:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/LinearLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" > 

     <CheckBox 
      android:id="@+id/checkBox1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 

     <EditText 
      android:id="@+id/editText1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:ems="10" > 

      <requestFocus /> 
     </EditText> 

    </LinearLayout> 

</LinearLayout> 

Это код Java:

public void onclickplus (View view){ 

     LayoutInflater inflate = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     final View view1 = inflate.inflate(R.layout.row_checkitem, null); 
     mainLayout.addView(view1); 
     count = count +1; 

} 

Мой вопрос, как же мы получаем доступ эти флажки и EditTexts добавлены в фактическом java-коде, чтобы я мог сохранить их данные в моей базе данных.

Если эти объекты, где предопределенные я бы, например:

EditText text1; 
text1 = (EditText) findViewById(R.id.editText1); 
text1.getText().toString(); 

и так далее, чтобы получить доступ к ценности использования EditText в.

В этом случае, однако, эти объекты отсутствуют, когда действие запускается.

Можете ли вы мне помочь? Спасибо.

ответ

0

Вы можете посмотреть на это решение:

Add EditText(s) dynamically and retrieve values – Android

Что они делают динамически добавлять несколько полей EditText и сохранять их в списке, чтобы получить доступ к ним позже. Вам просто нужно переписать его, а также добавить флажки.

+0

Приветствуем вас за ваш ответ. Я изучил решение, которое вы связали, я могу создать количество EditTexts и получить доступ к их значениям, используя следующий код: EditText [] ed; ed = new EditText [count]; \t \t \t \t для (INT I = 0; я <число; я ++) { \t \t \t изд [I] = новый EditText (это); \t \t \t ed [i].SETID (я); \t \t \t \t \t \t mainLayout.addView (ed [i]); \t \t} Однако, насколько я понимаю, я могу добавить только выбранное количество из них, в отличие от пользователя, раздувающего представление xml и добавляя или удаляя столько, сколько он считает нужным. Все еще ищете способ доступа к этим флажкам и editTexts, добавленным путем раздувания представления xml. –

+0

Зачем вам это нужно? Если вы посмотрите на пример, просто добавьте их в макет с помощью: 'tableLayout.addView (createOneFullRow (rowId));'. Доступ к полям EditText (например, для получения текста) может быть выполнен с помощью 'ed [i] .getText(). ToString();' Так был вопрос? Динамическое добавление и доступ к полям. –

+0

Я вернусь к вам. Поработаем сегодня вечером и посмотрим, как это работает. Спасибо. –

0

Мне удалось добиться того, что я хотел сделать, благодаря помощи Д.Вонника.

Я отказался от метода LayoutInflater и вместо этого использовал TableLayout и TableRows.

Таким образом, пользователь может добавить TableRows, содержащий флажок и EditText, нажав кнопку «+», и он также может удалить их, как он считает нужным, нажав кнопку «-». Я также могу получить их значения таким образом.

Вот код:

LinearLayout mainLayout; 
    TableLayout tablelayout; 
    TableRow[] tableRow; 
    int count; 
    EditText[] ed; 
    CheckBox[] cb; 

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     mainLayout = (LinearLayout)findViewById(R.id.LinearLayout1); 
     tablelayout = new TableLayout(this); 
     mainLayout.addView(tablelayout); 
     ed = new EditText[10]; 
     cb = new CheckBox[10]; 
     tableRow = new TableRow[10]; 

    } 

public void onclickplus (View view){ 


     ed[count] = new EditText(this); 
     ed[count].setId(count); 
     cb[count] = new CheckBox(this); 
     cb[count].setId(count); 
     tableRow[count] = new TableRow(this); 

     tablelayout.addView(tableRow[count]); 

     tableRow[count].addView(cb[count]); 
     tableRow[count].addView(ed[count]); 

     count = count +1; 

} 

public void onclickminus (View view){ 


     if (count>0){ 

      count = count -1; 
      tablelayout.removeView(tableRow[count]); 
    } 

    } 

Спасибо D.Wonnik указал мне в правильном направлении!

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