在Android Studio上构建带选项卡的滑动视图的mainActivity中出现空指针错误
我希望在我的应用程序中构建带标签的滑动视图功能,方法是遵循我在论坛的一个答案上找到的教程 [ 但我一直遇到一个空指针错误,我似乎无法找到原因。我严格遵守了教程,还阅读了其他关于论坛上滑动视图的类似问题。编码实际上与我目前的编码完全相同。但每次运行模拟器时,我都会遇到这个错误在Android Studio上构建带选项卡的滑动视图的mainActivity中出现空指针错误,android,android-fragments,android-actionbar,android-viewpager,swipeview,Android,Android Fragments,Android Actionbar,Android Viewpager,Swipeview,我希望在我的应用程序中构建带标签的滑动视图功能,方法是遵循我在论坛的一个答案上找到的教程 [ 但我一直遇到一个空指针错误,我似乎无法找到原因。我严格遵守了教程,还阅读了其他关于论坛上滑动视图的类似问题。编码实际上与我目前的编码完全相同。但每次运行模拟器时,我都会遇到这个错误 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.tim.swipe/com.example.tim.swipe.
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.tim.swipe/com.example.tim.swipe.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.ActionBar$Tab android.app.ActionBar.newTab()' on a null object reference
我假设这与ActionBar有关,但是教程和其他来源的代码实际上是相同的
MainActivity.java
public class MainActivity extends FragmentActivity implements ActionBar.TabListener {
ViewPager viewPager;
TabsPagerAdapter adapter;
ActionBar actionBar;
String[] tabs = { "FragmentA", "FragmentB", "FragmentC" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getActionBar();
adapter = new TabsPagerAdapter(getSupportFragmentManager());
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(this));
}
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
}
activity_main.xml
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent">
碎片
public class FragmentA extends Fragment {
public FragmentA() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_a, container, false);
return rootView;
}
FragmentB和FragmentC的代码相同,只是布局不同。将此变量添加到类中:
private TabsPagerAdapter mAdapter;
将onCreate方法更改为:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getActionBar();
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
actionBar.setNavigationMode(actionBar.NAVIGATION_MODE_TABS);
for (String tab_name : tabs) {
actionBar.addTab(actionBar.newTab().setText(tab_name)
.setTabListener(this));
}
}
我也犯了这个错误。
这里有一个解决方案,它对我有效
添加
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
之前
setContentView
确保清单中的主题支持操作栏
还要确保你的Android版本高于11
希望这对你有用
您可以参考下面的原始答案。
发布您的代码,这样我们就可以看到错误发生的地方。如果我看不到MainActivity中有什么内容,因为您还没有发布代码,请发布它。错误是“无法解析方法”getSupportActionBar()“我已经添加了这一点,但仍然收到相同的错误消息。它还说setNavigationMode已被弃用。我正在使用API级别21进行编译,如果这有任何帮助的话。我已将FragmentActivity更改为ActionBarActivity,然后使用actionBar=getSupportedActionBar()
这允许应用程序运行,这似乎绕过了java.lang空指针问题。但现在我遇到了一个问题,当滑动到下一个片段时,顶部的aciton栏不会随之改变。
setContentView