I'm trying to write an app with a Tab Layout using ViewPager and Fragments but everytime I run it, it crashes with a nullPointerException.
我正在尝试使用ViewPager和Fragments编写带有Tab布局的应用程序,但每次运行它时,它都会因nullPointerException而崩溃。
This is the code for my main activity:
这是我的主要活动的代码:
import android.annotation.TargetApi;
import android.app.ActionBar;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
@TargetApi(11)
public class MainActivity extends FragmentActivity {
ViewPager Tab;
TabPagerAdapter TabAdapter;
ActionBar actionBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TabAdapter = new TabPagerAdapter(getSupportFragmentManager());
Tab = (ViewPager)findViewById(R.id.pager);
Tab.setOnPageChangeListener(
new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar = getActionBar();
actionBar.setSelectedNavigationItem(position); }
});
Tab.setAdapter(TabAdapter);
actionBar = getActionBar();
//Enable Tabs on Action Bar
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.TabListener tabListener = new ActionBar.TabListener(){
@Override
public void onTabReselected(android.app.ActionBar.Tab tab,
FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
Tab.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(android.app.ActionBar.Tab tab,
FragmentTransaction ft) {
// TODO Auto-generated method stub
}};
//Add New Tab
actionBar.addTab(actionBar.newTab().setText("Android").setTabListener(tabListener));
actionBar.addTab(actionBar.newTab().setText("iOS").setTabListener(tabListener));
actionBar.addTab(actionBar.newTab().setText("Windows").setTabListener(tabListener));
}
TabPagerAdapter.java
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
public class TabPagerAdapter extends FragmentStatePagerAdapter {
public TabPagerAdapter(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
}
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:
//Fragement for Android Tab
return new Android();
case 1:
//Fragment for Ios Tab
return new Ios();
case 2:
//Fragment for Windows Tab
return new Windows();
}
return null;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 3; //No of Tabs
}
}
This is how my logcat looks like:
这就是我的logcat的样子:
07-11 12:27:21.803 11967-11967/com.example.diana.myapplication3 D/dalvikvm﹕ Late-enabling CheckJNI
07-11 12:27:21.943 11967-11967/com.example.diana.myapplication3 E/ResourceType﹕ 0x5acd8640: Failed to ResTable::remove() cookie = 0x3, not last table. mHeaders.size() = 4. Warning for spontaneous crashes when the garbage collector runs.
07-11 12:27:21.943 11967-11967/com.example.diana.myapplication3 E/asset﹕ Error removing runtime skin resource (cookie 0x3)
07-11 12:27:21.943 11967-11967/com.example.diana.myapplication3 I/asset﹕ Problem removing all runtime skin resources
07-11 12:27:22.043 11967-11967/com.example.diana.myapplication3 D/AndroidRuntime﹕ Shutting down VM
07-11 12:27:22.043 11967-11967/com.example.diana.myapplication3 W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x415478b0)
07-11 12:27:22.053 11967-11967/com.example.diana.myapplication3 E/AndroidRuntime﹕ FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.diana.myapplication3/com.example.diana.myapplication3.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2311)
at android.app.ActivityThread.access$600(ActivityThread.java:149)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5214)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.example.diana.myapplication3.MainActivity.onCreate(MainActivity.java:35)
at android.app.Activity.performCreate(Activity.java:5133)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2225)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2311)
at android.app.ActivityThread.access$600(ActivityThread.java:149)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5214)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
at dalvik.system.NativeStart.main(Native Method)
I think the problem here is that my actionBar
returns null
, therefore I added
我认为这里的问题是我的actionBar返回null,因此我补充说
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
but I get the same error.
但我得到了同样的错误。
Any ideas?
1 个解决方案
#1
0
I found what the problem was. I erased the getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
and instead of actionBar = getActionBar();
I used actionBar = getSupportActionBar();
and MainActivity extends ActionBarActivity
.
我发现了问题所在。我删除了getWindow()。requestFeature(Window.FEATURE_ACTION_BAR);而不是actionBar = getActionBar();我用了actionBar = getSupportActionBar();和MainActivity扩展了ActionBarActivity。
This solved my problem, hope it can help others too.
这解决了我的问题,希望它也可以帮助别人。
#1
0
I found what the problem was. I erased the getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
and instead of actionBar = getActionBar();
I used actionBar = getSupportActionBar();
and MainActivity extends ActionBarActivity
.
我发现了问题所在。我删除了getWindow()。requestFeature(Window.FEATURE_ACTION_BAR);而不是actionBar = getActionBar();我用了actionBar = getSupportActionBar();和MainActivity扩展了ActionBarActivity。
This solved my problem, hope it can help others too.
这解决了我的问题,希望它也可以帮助别人。