Получение текста динамически генерируемых 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("!##!");