получить TextView и EditText из программно созданных

Я создаю 1 LinearLayout внутри LinearLayout, который программно содержит 1 EditText и 1 TextView, и мне нужно получить текст из EditText и TextView. И это мой код:

основной.xml:

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="10dp" >

        <LinearLayout
            android:id="@+id/result"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:gravity="right"
            android:orientation="vertical" >
        </LinearLayout>
    </ScrollView>

Основная активность.java:

    linearLayout = (LinearLayout) view.findViewById(R.id.result);

    .......

 public void addItem(){
    LinearLayout childLayout = new LinearLayout(context);
    LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    childLayout.setLayoutParams(linearParams);
    childLayout.setTag(item_name);
    childLayout.setOrientation(LinearLayout.HORIZONTAL);


    TextView item = new TextView(context);
    item.setTag(item_name);
    item.setText(item_name);
    item.setTextSize(16);
    item.setGravity(Gravity.LEFT);
    LinearLayout.LayoutParams llp1 = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    llp1.setMargins(0, 0, 15, 0);
    item.setLayoutParams(llp1);
    item.setTextColor(context.getResources().getColor(android.R.color.black));

    EditText quantity = new EditText(context);
    quantity.setText(nama_barang);
    quantity.setTextSize(16);
    quantity.setGravity(Gravity.CENTER_HORIZONTAL);
    LinearLayout.LayoutParams llp2 = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    llp2.setMargins(10, 0, 15, 0);
    quantity.setLayoutParams(llp2);
    quantity.setTextColor(context.getResources().getColor(android.R.color.black));

    childLayout.addView(item);
    childLayout.addView(quantity);
    linearLayout.addView(childLayout);
 }

Помоги мне, пожалуйста.

Я изменил свой вопрос

На самом деле, мой случай выше произошел, когда я нажал addItem(), мое приложение отобразит новые TextView и EditText, поэтому, если этот процесс завершен, и перейдите к следующему фрагменту, чтобы отобразить весь текст TextViews и EditTexts, как это, используя StringBuilder:

Items    Qtt
Cola......1

Chicken...1

Meat......2

Помоги мне.


person wdyz    schedule 16.11.2016    source источник


Ответы (4)


Хотите стать таким?

String str = item.getText().toString();
String str2 = quantity.getText().toString();
person Rodrigo Paixão    schedule 16.11.2016
comment
да, но моя проблема в том, что я хочу получить весь текст из TextViews и все EditTexts из всех ChildLayout внутри LinearLayout. Существует больше TextView и EditText, а не только тот, который создан для условия. - person wdyz; 16.11.2016
comment
Хорошо, мы можем создать массив, чтобы получить все строки. Объявите вне for List<String> strings = new ArrayList<>(); в конце, чтобы добавить их strings.add(str); и strings.add(str2); - person Rodrigo Paixão; 16.11.2016
comment
извините, я отредактировал свои вопросы. Пожалуйста, проверьте выше. Спасибо - person wdyz; 16.11.2016

Как указано выше, использование item.getText().toString(); - это все, что вам нужно, тем не менее я предполагаю, что ваша проблема заключается в том, что вы объявляете свои представления внутри цикла, делая это локально позже в любом месте кода, вы вообще не получите никакого текста .

Попробуйте объявить свои представления как глобальные переменные или сделать это вне цикла, например;

//....

TextView item;
EditText quantity;    


for(int i = 0; i < cartCount; i++) {
LinearLayout childLayout = new LinearLayout(context);
LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
childLayout.setLayoutParams(linearParams);
childLayout.setTag(item_name);
childLayout.setOrientation(LinearLayout.HORIZONTAL);


item = new TextView(context);
item.setTag(item_name);
item.setText(item_name);
item.setTextSize(16);
item.setGravity(Gravity.LEFT);
LinearLayout.LayoutParams llp1 = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
llp1.setMargins(0, 0, 15, 0);
item.setLayoutParams(llp1);
item.setTextColor(context.getResources().getColor(android.R.color.black));

quantity = new EditText(context);
quantity.setText(nama_barang);
quantity.setTextSize(16);
quantity.setGravity(Gravity.CENTER_HORIZONTAL);
LinearLayout.LayoutParams llp2 = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
llp2.setMargins(10, 0, 15, 0);
quantity.setLayoutParams(llp2);
quantity.setTextColor(context.getResources().getColor(android.R.color.black));

childLayout.addView(item);
childLayout.addView(quantity);
linearLayout.addView(childLayout);

}

С другой стороны, глядя на свой код, пытаетесь ли вы создать список EditText и TextView? Если это так, было бы разумно рассмотреть возможность использования ListView с пользовательскими элементами; Здесь вы можете найти хороший учебник, делающий что-то подобное.

person Community    schedule 16.11.2016
comment
собственно, мое приложение. отобразить кнопку добавления элемента. Итак, если щелкнуть элемент добавления, то появятся TextView и EditText, созданные программно. Моя проблема в том, что если я перейду к следующему фрагменту, я хочу отобразить все TextViews и EditTexts, которые... - person wdyz; 16.11.2016
comment
...используя StringBuilder. - person wdyz; 16.11.2016

Это похоже на то, что вы должны смотреть на представление адаптера, такое как recyclerview. Вы можете начать замечать некоторые проблемы с производительностью при использовании linearlayout.

Так или иначе. Вы можете добавлять представления в список по мере добавления их в linearlayout.

List<TextView> items = new LinkedList<>();
List<EditText> quantities = new LinkedList<>();  
for(int i = 0; i < cartCount; i++) {
   ...
    childLayout.addView(item);
    childLayout.addView(quantity);
    items.add(item);
    quantities.add(quantity);
    linearLayout.addView(childLayout);
}

затем просмотрите ваши взгляды

for (TextView textView : items) {

}

for (EditText editText : quantities) {

}
person Matthew Shearer    schedule 16.11.2016
comment
извините, я отредактировал свою проблему выше, пожалуйста, проверьте, спасибо - person wdyz; 16.11.2016

person    schedule
comment
пожалуйста, прочитайте мой исходный код выше, братан. Мне нужно получить весь текст TextViews и весь текст EditTexts из всех дочерних макетов LinearLayout. - person wdyz; 16.11.2016