Динамически вкладки 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;