2015-10-23 3 views
1

У меня есть блок TextView, определенный в макете.Не удается получить доступ к TextView с помощью другого метода

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/article" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:padding="16dp" 
android:textSize="18sp" /> 

Я определяю частный атрибут класса как:

View inflatedView; 

Позже, в методе onCreateView, это дает значение:

inflatedView = inflater.inflate(R.layout.article_view, container, false); 

При доступе поле TextView из onCreateView метод, он не создает никаких проблем, однако, пытаясь получить к нему доступ из других методов, возвращает нулевую ссылку.

Вот код, я использую:

TextView article = (TextView) inflatedView.findViewById(R.id.article); 

мне удалось получить его на работу, установив статью в качестве частного атрибута, инициализирует его значение в методе onCreateView, а затем использовать его во всех других методов, однако , Я не могу понять, в чем проблема с вышеприведенным подходом.

EDIT:

View inflatedView; 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    if (savedInstanceState != null) { 
     mCurrentPosition = savedInstanceState.getInt(ARG_POSITION); 
    } 
    //article_view contains the article TextView 
    inflatedView = inflater.inflate(R.layout.article_view, container, false); 
    return inflatedView; 
} 

public void updateArticleView(int position) { 
    TextView article = (TextView) inflatedView.findViewById(R.id.article); 
    article.setText(Ipsum.Articles[position]); 
    mCurrentPosition = position; 
} 
+0

вы можете обеспечить полное выполнение кода первого подхода? –

+0

Если TextView является корневым элементом в макете, вам не нужно вызывать 'findViewById (...)' - вызов 'inflate (...)' будет возвращать TextView напрямую. – adelphus

+0

и откуда вы вызвали функцию updateArticleView()? –

ответ

0

Убедитесь, что inflatedView не равно нулю перед использованием этого метода.

+0

Я проверил его, функция «.setText()» никогда не вызывается, если она равна нулю. – hazeiio

+0

, потому что это вызовет исключение. –

1

Поэтому я решил проблему, поставив блок TextView внутри LinearLayout, а затем вызвав findViewById (R.id.article);

Успели получить TextView как с помощью:

inflatedView.findViewById(R.id.article); 

и

getView().findViewById(R.id.article);