Как узнать идентификаторы просмотров, если я надуваю просмотр несколько раз в одном и том же родительском элементе при нажатии кнопки? - PullRequest
0 голосов
/ 13 декабря 2011

У меня сложная ситуация, позвольте мне сказать это так, я хочу, чтобы пользователь использовал мои 3 текстовых поля для установки данных для тревоги, и после заполнения информации я даю ему возможность установить другую тревогу для этогоцель я использую кнопку.У меня есть три строки таблицы в макете таблицы, которые определены в файле child.xml, и у каждого элемента есть набор идентификаторов.В своей деятельности я раздуваю child.xml несколько раз по событию нажатия кнопки и могу успешно раздувать его столько раз, сколько захочу.Но моя проблема в том, что я надуваю один и тот же XML-файл много раз (я не знаю, сколько раз) во время выполнения, я не совсем понимаю, как мне получить данные из определенных текстовых полей, таких как TextViews, и идентифицировать их с помощьюуникальные идентификаторы, так как я обязан это сделать.Как ты об этом?

Ответы [ 4 ]

2 голосов
/ 03 января 2012

может быть это может помочь ...


            LinearLayout ll=(LinearLayout) findViewById(R.id.i1);   ///main xml file which contains the layout i m inflating
            String str[]={"a","b","c"};
            View vi[]=new View[3];
            LayoutInflater li=(LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);
            for(int i=0;i<3;i++){
                  View v=li.inflate(R.layout.addit, null);
                  TextView t=(TextView) v.findViewById(R.id.t1);
                  t.setText(str[i]);
                  ll.addView(v);
                      vi[i]=v;
            }
            TextView t1=new TextView(this);
            TextView t2=new TextView(this);
            TextView t3=new TextView(this);
            TextView r1=(TextView) vi[0].findViewById(R.id.t1);
            TextView r2=(TextView) vi[1].findViewById(R.id.t1);
            TextView r3=(TextView) vi[2].findViewById(R.id.t1);
            t1.setText(r1.getText());
            t2.setText(r2.getText());
            t3.setText(r3.getText());
            ll.addView(t1);
            ll.addView(t2);
            ll.addView(t3);

             setContentView(ll);

мой файл addit.xml содержит следующее:

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

       <TextView
          android:id="@+id/t1"
          android:layout_width="fill_parent"
          android:layout_height="40dp"
          android:text="" />
       </TextView>
       </LinearLayout>

здесь я добавляю динамически макет из addit.xml 3 раза, который содержит текстовое представление с идентификатором t1 .. для каждого textview я устанавливаю текст из строкового массива str .. и добавление каждого объекта представления v в массив для ссылки ... Теперь, если я хочу получить текст для каждого текстового представления, я могу использовать ссылку на представление, сохраненное в массиве, и найти текстовое представление по идентификатору, как в коде, чтобы получить текст из каждого текстового представления

enter image description here

2 голосов
/ 13 декабря 2011

Я бы пошел программно об этом.

Когда пользователь запрашивает новый сигнал тревоги, вы надуваете свой XML-файл.На этом этапе сохранит ссылку на раздутое представление (в Списке или какой-либо другой коллекции) в вашей деятельности.

Поэтому, когда вы хотите извлечь данные, не делайтеt findViewById, просто используйте вашу ссылку

1 голос
/ 13 декабря 2011

я начну с базового

<Layout>
<Button1>
</layout>

Сейчас в деятельности

Button btn;View view1=null;
///Inflate file if view is null
first time when you inflating
view1=inflate
 btn=view1.findViewbyid();

Теперь предположим, что вы надули другой вид, но значение view1 не изменится, тогда btn будет содержать ссылку на эту кнопку. И когда она станет видимой. Она будет работать как обычная кнопка.

1 голос
/ 13 декабря 2011

Просто запомните ссылку View, которую вы получаете при каждом inflate() экземпляре. Приведите их к TextView, когда вам нужно прочитать с них текст.

...