Динамически вкладки Android

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

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setVisibility(int)' on a null object reference

Код, который я использую ниже, массив subAreas уже имеет 3 значения.

public class ExtintorFragment extends Fragment {

    private LinearLayout ll;
    private TabHost tabs;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ll = (LinearLayout) inflater.inflate(R.layout.fragment_criterios, container, false);
        setHasOptionsMenu(true);

        tabs = (TabHost) ll.findViewById(R.id.tabHost);
        tabs.setup();

        String[] subAreas;

        EquipamentosSubAreaDbAdapter mDb = new EquipamentosSubAreaDbAdapter(getContext());
        mDb.open();

        subAreas = mDb.getSubareasEquipamento("Extintores");

        mDb.close();

        for (int i = 0; i < subAreas.length; i++) {

            TabHost.TabSpec spec = tabs.newTabSpec(subAreas[i]);
            spec.setIndicator(subAreas[i]);

            spec.setContent(new TabHost.TabContentFactory() {
                @Override
                public View createTabContent(String tag) {
                    return null;
                }
            });

            tabs.addTab(spec);

        }

        return ll;
    }

    @Override
    public void onActivityCreated (Bundle savedInstanceState){
        super.onActivityCreated(savedInstanceState);
    }

}

Кроме того, не могли бы вы дать мне советы по созданию listView как TabContent.

Спасибо

1 ответ

Вы не можете раздувать вид, пока в указанном виде нет вкладок. Он попытается установить первую вкладку как то, что должно быть показано во фрагменте, и, поскольку вы не добавили никаких вкладок в представление, это приведет к нулевому указателю.

Попробуйте следующий код внутри onCreateView. Конечно, вам нужно будет параметризовать addTab в соответствии с желаемыми значениями.

mTabHost = new FragmentTabHost(getActivity());

mTabHost.setup(getActivity(), getChildFragmentManager(), android.R.id.tabcontent);

mTabHost.addTab(
            mTabHost.newTabSpec("Tab 1").setIndicator("Tab 1")
            , DefaultContentFragment.class
            , null);

mTabHost.addTab(
            mTabHost.newTabSpec("Tab 2").setIndicator("Tab 2")
            , DefaultContentFragment.class
            , null);

mTabHost.addTab(
            mTabHost.newTabSpec("Tab 3").setIndicator("Tab 3")
            , DefaultContentFragment.class
            , null);

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