Получение текста динамически генерируемых TextViews внутри линейного макета и сохранение его в массиве String.

Как получить текст textViews внутри линейного макета? Я в основном собираюсь поместить код в onSavedInstance, с помощью которого я собираюсь отображать textViews как таковые в linearLayout в случае изменения ориентации экрана.

Я изменил код ниже

for (int i = 0; i < ll1.getChildCount(); i++) {


    }

как

for (int i = 0; i < ll1.getChildCount(); i++) {
        TextView children = (TextView) ll1.getChildAt(i);
        String b1 = (String) children.getText().toString();
    }

Я пробовал приведенный выше код, но не смог добиться успеха.

3 ответа

Попробуй это:

String[] bArray = new String[ll1.getChildCount()];

for (int i = 0; i < ll1.getChildCount(); i++) {
    TextView children = (TextView) ll1.getChildAt(i);
    String b = children.getText().toString();
    bArray[i] = b;
}

Это может работать, если ваш линейный макет содержит только текстовые представления. В противном случае вам нужно будет указать все свои идентификаторы textviews, такие как txtView1, txtView2 и т. Д., И извлечь их, используя id.

Редактировать:

Чтобы вернуть всех детей в одну строку, попробуйте это:

StringBuilder sb = new StringBuilder(ll1.getChildCount());
for (int i = 0; i < ll1.getChildCount(); i++) {
    TextView children = (TextView) ll1.getChildAt(i);
    sb.append(children.getText().toString()+" ");
}
System.out.println(sb.toString());

Надеюсь, поможет.

Вы можете использовать droidQuery для этого:

$ d = $.with(lll).selectByType("android.widget.TextView");
String[] array = new String[d.size()];
int index = 0;
d.each(new Function() {
    public void invoke($ droidquery, Object... params){
        array[index] = droidquery.val().toString();
        index++;
});
//now use you array variable

Вы можете использовать что-то вроде этого. В вашем файле макета XML установите тег как txtview, как показано ниже

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:tag="txtview"
    android:text="@string/hello_world" />

<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:tag="txtview"
    android:text="TextView" />

<TextView
    android:id="@+id/textView3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:tag="txtview"
    android:text="TextView" />

<TextView
    android:id="@+id/textView4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:tag="txtview"
    android:text="TextView" />

и используйте следующий код в своей деятельности

    LinearLayout ll1 = (LinearLayout) findViewById(your layout id);

    String[] bArray;
    StringBuilder stringBuilder = new StringBuilder();
    for (int i = 0; i < ll1.getChildCount(); i++) {
        if (ll1.getChildAt(i).getTag().equals("txtview")) {
            TextView children = (TextView) ll1.getChildAt(i);
            stringBuilder.append(children.getText().toString() + "!##!");
        }
    }
    bArray = stringBuilder.toString().split("!##!");
Другие вопросы по тегам