Android TabHost.addTab -> Исключение нулевого указателя

Вот мой код:

public class Main extends Activity { @Override public void onCreate(Bundle savedInstanceState) { TabHost tabHost = new TabHost(this); TabHost.TabSpec tab = tabHost.newTabSpec("tab1"); tab.setIndicator("Tab 1"); tab.setContent(new TabHost.TabContentFactory() { @Override public View createTabContent(String tag) { TextView tv = new TextView(Main.this); tv.setText("tab 1 content"); return tv; } }); tabHost.addTab(tab); setContentView(tabHost); } } 

Я получаю эту ошибку:

  [...] 07-13 20:26:49.261: ERROR/AndroidRuntime(625): Caused by: java.lang.NullPointerException 07-13 20:26:49.261: ERROR/AndroidRuntime(625): at android.widget.TabHost.addTab(TabHost.java:206) 07-13 20:26:49.261: ERROR/AndroidRuntime(625): at test.test.Main.onCreate(Main.java:27) [...] 

Мне нужно сделать это с помощью кода, и я не могу использовать XML. Может ли кто-нибудь помочь мне исправить этот код, пожалуйста?

    Вы должны использовать TabActivity, он должен иметь тот же специальный макет, который должен быть установлен как контент (см. http://developer.android.com/resources/tutorials/views/hello-tabwidget.html ). Если вы не можете использовать xml, вы должны создать тот же контент из java-кода:

     public class Main extends TabActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TabHost tabHost = new TabHost(this); tabHost.setId(android.R.id.tabhost); TabWidget widget = new TabWidget(this); widget.setId(android.R.id.tabs); FrameLayout content = new FrameLayout(this); content.setId(android.R.id.tabcontent); LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); layout.addView(widget); layout.addView(content); tabHost.addView(layout); setContentView(tabHost); TabHost.TabSpec tab1 = tabHost.newTabSpec("tab1"); tab1.setIndicator("Tab 1"); tab1.setContent(new TabHost.TabContentFactory() { @Override public View createTabContent(String tag) { TextView tv = new TextView(Main.this); tv.setText("tab 1 content"); return tv; } }); tabHost.addTab(tab1); TabHost.TabSpec tab2 = tabHost.newTabSpec("tab2"); tab2.setIndicator("Tab 2"); tab2.setContent(new TabHost.TabContentFactory() { @Override public View createTabContent(String tag) { TextView tv = new TextView(Main.this); tv.setText("tab 2 content"); return tv; } }); tabHost.addTab(tab2); setContentView(tabHost); } 

    }

    Для людей, которые могут задаться вопросом о том, что TabActivity устарела, в документации говорится, что вам нужно вызвать setup () перед добавлением вкладок, когда вы не используете TabActivity.

     tabHost.setup(); 

    Проверка метода TabHost.addTab (…) в исходном коде предполагает, что ваш TabWidget пока недоступен. TabWidget должен быть создан в коде сначала или системой при создании макета и должен иметь идентификатор android.R.id.tabs .

    Вы думали о расширении TabActivity , а затем вызвали getTabHost (), чтобы получить экземпляр TabHost? Не знаете, какова ваша цель, но на это стоит обратить внимание.