2014-04-11 2 views
2

탭 레이아웃을 구현했으며 앱이 시작되지 않았습니다. 이 줄에 NullPointerException이 발생합니다.탭 레이아웃 구현시 NullPointerException이 발생했습니다.

actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

모든 것이 올바르게 수행되었다고 생각합니다. 나는 내 실수를 못 찾는다.

MainActivity :

import android.app.ActionBar; 
import android.app.ActionBar.Tab; 
import android.app.FragmentTransaction; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.view.ViewPager; 

import com.msh.numeral_system_converter_adapter.TabsPagerAdapter; 

public class MainActivity extends FragmentActivity implements 
    ActionBar.TabListener { 

private ViewPager viewPager; 
private TabsPagerAdapter mAdapter; 
private ActionBar actionBar; 

// Tab titles 
private String[] tabs = { "Converter", "Calculator"}; 

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

    // Initilization 
    viewPager = (ViewPager) findViewById(R.id.pager); 
    actionBar = getActionBar(); 
    mAdapter = new TabsPagerAdapter(getSupportFragmentManager()); 

    viewPager.setAdapter(mAdapter); 
    //actionBar.setHomeButtonEnabled(false); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    // Adding Tabs 
    for (String tab_name : tabs) { 
     actionBar.addTab(actionBar.newTab().setText(tab_name) 
       .setTabListener(this)); 
    } 

    /** 
    * on swiping the viewpager make respective tab selected 
    * */ 
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

     @Override 
     public void onPageSelected(int position) { 
      // on changing the page 
      // make respected tab selected 
      actionBar.setSelectedNavigationItem(position); 
     } 

     @Override 
     public void onPageScrolled(int arg0, float arg1, int arg2) { 
     } 

     @Override 
     public void onPageScrollStateChanged(int arg0) { 
     } 
    }); 
} 

@Override 
public void onTabReselected(Tab tab, FragmentTransaction ft) { 
} 

@Override 
public void onTabSelected(Tab tab, FragmentTransaction ft) { 
    // on tab selected 
    // show respected fragment view 
    viewPager.setCurrentItem(tab.getPosition()); 
} 

@Override 
public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
} 

}

로그 파일 :

04-11 17:44:02.553 1545-1545/com.msh.numeral_system_converter E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: com.msh.numeral_system_converter, PID: 1545 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.msh.numeral_system_converter/com.msh.numeral_system_converter.MainActivity}: java.lang.NullPointerException 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
     at android.app.ActivityThread.access$800(ActivityThread.java:135) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:136) 
     at android.app.ActivityThread.main(ActivityThread.java:5017) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:515) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
     at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
      at com.msh.numeral_system_converter.MainActivity.onCreate(MainActivity.java:34) 
      at android.app.Activity.performCreate(Activity.java:5231) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)             at android.app.ActivityThread.access$800(ActivityThread.java:135) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:136) 
            at android.app.ActivityThread.main(ActivityThread.java:5017) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
+0

과 같은 테마를 사용해보세요. 매니페스트를 게시 할 수 있습니까? 더 정확하게'android : theme' 속성의 가치! –

답변

3

getActionBar() 귀하의 창에 ActionBar이없는 경우 null을 다시 실행할 수 있습니다. 활동/응용 프로그램 테마로 Theme.NoTitleBar 스타일을 선택한 경우처럼.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

// The Action Bar is a window feature. The feature must be requested 
// before setting a content view. Normally this is set automatically 
// by your Activity's theme in your manifest. The provided system 
// theme Theme.WithActionBar enables this for you. Use it as you would 
// use Theme.NoTitleBar. You can add an Action Bar to your own themes 
// by adding the element <item name="android:windowActionBar">true</item> 
// to your style definition. 
    getWindow().requestFeature(Window.FEATURE_ACTION_BAR); 
    setContentView(R.layout.main); 

// experiment with the ActionBar 
    ActionBar actionBar = getActionBar(); 
} 

link도 도움이 될 수 있습니다 :이 코드는 대신 (picked from there)

사용.

돈 '- : 그 문제의 사용이 수정 프로그램을 해결하기 위해 내용

를 추가하기 전에 호출해야합니다)

requestFeature (- : 위의 사용

+0

고맙습니다. 액션 바를 사용할 수 있었고 모든 것이 괜찮습니다. 내 잘못 :( –

1

이 코드 :

actionBar = getActionBar(); 
mAdapter = new TabsPagerAdapter(getSupportFragmentManager()); 

viewPager.setAdapter(mAdapter); 
//actionBar.setHomeButtonEnabled(false); 
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

당신은 getActionBar() 메소드에서 액션 바을 할당하지만, 증명하지 않았다. 그 코드. 내 생각 엔 getActionBar()이 null을 반환합니다. NullPointerException이 ActionBar의 필드를 참조하지 않은 것으로 보아 null 객체에서 setNavigationMode을 호출하려고 시도하는 중입니다.

0

는 다른 오류가 발생할 수 있습니다 해결 requestFeature() 전에 setContentView()으로 전화하십시오.

0

이 예외는 ActionBar이 아닌 테마를 선택한 경우 발생합니다.

<style name="AppTheme" parent="@android:style/Theme.Holo.Light"> 
    <!-- Customize your theme here. --> 
</style> 
관련 문제