findViewById(R.id.tabhost) всегда возвращает ноль

У меня уже есть приложение в Google Play, и у меня нет проблем, пока я не обновлю свою Android Studio. Build.gradle нужно изменить, чтобы проект можно было скомпилировать. Вот что я изменил:

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile 'com.android.support:appcompat-v7:21.0.0'
    compile 'com.google.android.gms:play-services:6+'
    compile 'com.android.support:support-v4:+'
}

Единственное изменение - com.android.support:appcompat-v7:+, которое изменяется на com.android.support:appcompat-v7:21.0.0.

Моя проблема заключается в том, что.findViewById(R.id.tabhost) всегда возвращает ноль, так что приложение вылетает. Вот мой файл макета:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.app.FragmentTabHost xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tabhost"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

Мой код Java:

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTabHost;

public class MenuLeftFragment extends Fragment {
    private FragmentTabHost mFragmentTabHost;

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mView = getView();
        if (mView != null) {
            mFragmentTabHost = (FragmentTabHost) mView
                    .findViewById(R.id.tabhost);

Любая идея? Благодарю.

1 ответ

Решение

Вы должны сделать это в onCreateView() где вы должны определить следующее:

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.your_layout, container, false);
    mFragmentTabHost = (FragmentTabHost) v.findViewById(R.id.tabhost);
    return v;
}

Если вы хотите сохранить этот код, getView() на onActivityCreated() неправильно, если у вас есть мнение о вашем onCreate() Вы можете сделать что-то вроде:

mView = v; 

Тогда в вашем onActivityCreated() вместо звонка getView() использование mView

Тогда это должно работать.

Другие вопросы по тегам