Есть ли способ отличить TextViews или любые другие View, имеющие один и тот же идентификатор, накачанный несколько раз из одного XML-файла? - PullRequest
0 голосов
/ 14 декабря 2011

Я надеюсь, что получу ответ на свой вопрос в этот раз, я уже опубликовал вопрос по этому вопросу, но я думаю, что люди пропустили его, так как он был поставлен неправильно, вот ссылка на мой предыдущий вопрос Как я знаю идентификаторы просмотров, если я надуваю просмотр несколько раз в одном и том же родительском элементе при нажатии кнопки? Я надуваю child.xml, который содержит TableLayout с 3 LinearLayouts, которые снова содержат TextView в моем основном событии «Активность при нажатии кнопки», пользователь может добавить столько представлений, сколько он хочет.

Но меня смущает вопрос о том, как собирать данные из этих текстовых представлений или устанавливать для них setOnClickListeners, поскольку разные представления разделяют один и тот же идентификатор TextView.

Люди предложили мне использовать findViewById для раздутого представления, добавив его с соответствующим типом и сохранив ссылку в списке, но я могу установить OnClickListener только для первого раздуваемого представления.

Я хотел знать, возможно ли вообще добиться того, что я делаю? В другом посте я прочитал, что findViewById находит первый возможный экземпляр представления, которое он может найти. Это проблема в моем случае.

Пожалуйста, посмотрите мой фрагмент кода

TextView[] tv=new TextView[l.size()]; 
for(int i=0;i<tv.length;i++){ 
tv[i]=(TextView)l.get(i).findViewById(R.id.mdsnew_type_sp); 
tv[i].setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
showDialog(DATE_DIALOG_ID); } 
});
 //I have also tried this
 public void getData(){ 
 for(int i=0;i<l.size();i++){ 
 tv1=(TextView)l.get(i).findViewById(R.id.mdsnew_type_sp);
  }

Но я могу установить прослушиватель OnClick только для первого TextView, а все остальные игнорируются.

Вот еще одна ссылка, которая объясняет, как я раздуваю свою деятельность и похожий сценарий, но получение информации там не объясняется Раздувание представления несколько раз в одном и том же родительском элементе при нажатии кнопки

Любая помощь будет вознаграждена, спасибо заранее.

Ответы [ 2 ]

1 голос
/ 10 января 2014

Это может помочь

LanearLayout parentLayout = (LinearLayout)findViewById(R.id.main_ll);
 int count = parentLayout.getChildCount();
        for (int i = 0; i < count; i++)
     {
        View view = mainLl.getChildAt(i);
        if (view instanceof TextView) 
            {
              int id=view.getId();
            ((TextView) view).setText(" ");

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

Поскольку эти TextViews были добавлены к родителю ViewGroup (в вашем случае LinearLayout), вы можете просмотреть список дочерних представлений родителя и добавить OnClickListener к каждому из них:

for (int childPos = 0; childPos < myLayout.getChildCount(); childPos++) {
    myLayout.getChildAt(childPos).setOnClickListener(new OnClickListener() {
        @Override 
        public void onClick(View v) { 
            // ...
        }
    });
}
...