2013-06-06 6 views
0

программно Мне нужно получить доступ к внутренней TextView с помощью макета InflaterЗаданных значений для TextView в Toast

Суды hirarchy:

<relative layout id="rlRoot"> 
<relative layout> 
    <linear layout> 
    <linear layout> 
    <relative layout id="rlTv"> 
     <textView id="tvOne"> 

Я хочу, чтобы динамически установить значение для tvOne ид через тост.

Logic Я ниже

LayoutInflater inflater = getLayoutInflater(); 
View layout = inflater.inflate(R.layout.test, (ViewGroup) findViewById(R.id.rlRoot)); 
TextView txtId = (TextView) layout.findViewById(R.id.tvOne); 
txtId.setText("Id: " + getId()); 

Toast toast = new Toast(getApplicationContext()); 

toast.setGravity(Gravity.FILL, 0, 0); 
toast.setDuration(Toast.LENGTH_LONG); 
toast.setView(layout); 
toast.show(); 

Но это дает «вид не прилагается к оконному менеджеру». Я также изменил rlRoot на rlTv. Но такая же ошибка. Как получить доступ к этому вложенному текстовому виду?

+0

Да, это не проблема с контекстом, я думаю. Фактически над этим textView у меня также есть кнопка, которую я установил для невидимого в коде после вызова функции setText на этом текстовом элементе. После того, как я установил inflater.inflate (R.layout.test, null), кажется, что теперь логика работает нормально. –

ответ

1

Если ваша логика в вашем onCreate() затем изменить

View layout = inflater.inflate(R.layout.test, (ViewGroup) findViewById(R.id.rlRoot)); 

Эта линия для

View layout = inflater.inflate(R.layout.test, null); 

Как это. Я надеюсь, что это поможет вам.

+0

На самом деле это не в onCreate, а отдельная функция. Но, как я упомянул в комментарии ρяσѕρєя K, установив его в null, он сработал. Я думаю, что если мы укажем viewGroup, нам нужно проехать точного родителя, как я изначально задавал в этом вопросе. Но если он равен нулю, он по умолчанию решает корень завышенного xml, как в спецификации. Во всяком случае, спасибо за вашего собеседника. –

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