2011-03-08 5 views
0

Я добавляю программный код TextViews с использованием цикла for и использую setId (Int int) для установки уникального идентификатора для этого перкулярного Textview. Но теперь я хочу искать textView на основе этого id. Как я могу искать?Поиск Текстовое представление, которое создано программным

неожиданное неожиданное приложение неожиданно остановилось ... «Вот мой код.

public class Idtest extends Activity { 
    TextView tv; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     LinearLayout ll=new LinearLayout(this); 
     tv=new TextView(this); 

     tv.setText("Hello"); 
     ll.addView(tv); 

     tv=new TextView(this); 
     tv=(TextView)ll.getChildAt(1); 

     setContentView(tv); 


    } 
} 

ответ

2

tv, очевидно, null в конце (LinearLayout имеет только одного ребенка, который по индексу 0), так что вы в основном вызывая setContentView(null) что приводит к исключению. Мне непонятно, что вы пытаетесь сделать (ваш код очень запутан).

Предположив вы пытаетесь показать несколько TextView сек в LinearLayout, вот мое предложение:

public class Idtest extends Activity { 
    LinearLayout mainLayout; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     mainLayout = new LinearLayout(this); 
     setContentView(mainLayout); 

     for (int i=0; i < 10; i++) { 
      TextView tv = new TextView(this); 
      tv.setText("Hello " + i); 
      mainLayout.addView(tv); 
     } 
    } 
} 

Если в любой последующий момент, вам нужно один из TextView с, сделайте следующее:

TextView tvX = mainLayout.getChildAt(X); // where X is between 0 and 9 

Также обратите внимание, что создание макета из кода является злым. Если вы можете этого избежать, пожалуйста. Например, если число TextView s является динамическим, то совершенно нормально создавать их из кода (хотя вы могли бы надуть их). Тем не менее, не рекомендуется также создавать код LinearLayout. Вы должны иметь это в XML. Если у вас также может быть TextView s в XML, это будет еще лучше.

+0

Спасибо, за код. Но, хотя я не мог получить перкулярное текстовое поле. Принудительное закрытие приложения. TextView tvX = (TextView) mainLayout.getChildAt (2); setContentView (tvX); Эти две строки я написал. – Nirav

+0

Почему вы 'setContentView (tvX)'? Это не имеет смысла, объясните, что вы пытаетесь сделать лучше. – Felix

+0

Я просто вижу, что TextView на экране, который я выбрал. Чтобы подтвердить, что выбранный TextView является correnct. – Nirav

1

Существует еще один вариант тоже ... у нас есть setTag() и getTag() методы. Добавляя textview, дайте тег для него, и всякий раз, когда вы хотите выполнить поиск, используйте getTag().

+0

В setTag() как аргумент, что я должен пройти? – Nirav

+0

любой объект, скажем, строка ... для имени textview u можно установить как nameTV.setTag («name»); – Mathew

+0

Хорошо ... Спасибо. – Nirav

1

Я полагаю, вы добавляете элементы управления TextView в какую-либо группу ViewGroup (например, LInearLayout)?

Вы можете перебирать дочерние представления ViewGroup с помощью getChildCount()/getChildAt (index) и сравнивать идентификатор дочернего вида с тем, который вы ищете.

+0

У меня есть обновленный вопрос ... пожалуйста, проверьте мой код и скажите мне, что является проблемой? – Nirav

Смежные вопросы