2015-05-07 3 views
0

Я работаю с учебником this, чтобы научить себя фрагментам вкладки. Когда я вставляю и запустить MainActivity я получаю эту ошибку:Вкладка Fragment Tutorial не работает по построению

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setDisplayShowHomeEnabled(boolean)' on a null object reference at hss.fragmenttabstutorial.MainActivity.onCreate(MainActivity.java:27)

Так что я изменил активность в ActionBarActivity, и изменил ActionBar на getSupportActionBar как предлагали многие. Теперь он не будет создан из-за getSupportActionBar, указав «Несовместимые типы». Что мне делать?

Вот основной код:

import android.app.Activity; 
import android.os.Bundle; 
import android.app.ActionBar; 

import android.app.Fragment; 
import android.support.v7.app.ActionBarActivity; 

public class MainActivity extends ActionBarActivity { 

// Declaring our tabs and the corresponding fragments. 
ActionBar.Tab bmwTab, fordTab, toyotaTab; 
Fragment bmwFragmentTab = new FragmentTab1(); 
Fragment toyotaFragmentTab = new FragmentTab2(); 
Fragment fordFragmentTab = new FragmentTab3(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // Asking for the default ActionBar element that our platform supports. 
    ActionBar actionBar = getSupportActionBar(); 

    // Screen handling while hiding ActionBar icon. 
    actionBar.setDisplayShowHomeEnabled(false); 

    // Screen handling while hiding Actionbar title. 
    actionBar.setDisplayShowTitleEnabled(false); 

    // Creating ActionBar tabs. 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    // Setting custom tab icons. 
    bmwTab = actionBar.newTab().setText("Fragment1"); 
    toyotaTab = actionBar.newTab().setText("Fragment2"); 
    fordTab = actionBar.newTab().setText("Fragment3"); 

    // Setting tab listeners. 
    bmwTab.setTabListener(new TabListener(bmwFragmentTab)); 
    toyotaTab.setTabListener(new TabListener(toyotaFragmentTab)); 
    fordTab.setTabListener(new TabListener(fordFragmentTab)); 

    // Adding tabs to the ActionBar. 
    actionBar.addTab(bmwTab); 
    actionBar.addTab(toyotaTab); 
    actionBar.addTab(fordTab); 
} 

}

+1

Ваш импорт неправильной информации. вам нужно импортировать панель действий из пакета поддержки – njzk2

ответ

1

Вместо import android.app.ActionBar использование android.support.v7.app.ActionBar.

Это гарантирует совместимость с остальной частью библиотеки поддержки, включая ActionBarActivity.

+0

Итак, когда я меняю его на это, мой класс TabListener (например, в «toyotaTab.setTabListener» (новый TabListener (toyotaFragmentTab));) жалуется. Я тоже изменил библиотеку, но теперь он не будет расширять ActionBar.TabListener – Kat

+1

Google, похоже, невероятно сложно для разработчиков адаптироваться к новым стилям дизайна и обновлениям. Я тоже столкнулся с этой проблемой, и вам придется полностью изменить способ работы ActionBar.TabListener. Вы можете расширить «AppCompatActivity» и изменить много вещей, но на данный момент я бы рекомендовал просто придерживаться того, что у вас было раньше. Если вы хотите использовать 'AppCompatActivity', это означает, что вам нужно использовать' Toolbar' вместо 'ActionBar', и я ответил на вопрос [здесь] (http://stackoverflow.com/questions/29868277/using-sliding- tabs-with-toolbar) о том, как с помощью этого можно обновлять макеты табуляции. –

+0

Спасибо! Хорошо знать. Обычно я прибегаю к тому, чтобы просто сказать «к черту!» и возврат к обесцененным вкладкам. Я посмотрю на ваш ответ и посмотрю, поможет ли он мне. – Kat

Смежные вопросы