Java actionBar.setNavigationMode(actionBar.NAVIGATION\u MODE\u选项卡)已弃用
我正在跟随教程,我得到了错误 java.lang.NullPointerException:尝试调用虚拟方法“void” 空对象上的android.app.ActionBar.setNavigationMode(int)“” 参考文献 我正在使用Android Studio编写这个程序,从API 11到API 21我都试过了,但都不管用Java actionBar.setNavigationMode(actionBar.NAVIGATION\u MODE\u选项卡)已弃用,java,android,Java,Android,我正在跟随教程,我得到了错误 java.lang.NullPointerException:尝试调用虚拟方法“void” 空对象上的android.app.ActionBar.setNavigationMode(int)“” 参考文献 我正在使用Android Studio编写这个程序,从API 11到API 21我都试过了,但都不管用 public class Tabtest extends FragmentActivity implements ActionBar.TabListener {
public class Tabtest extends FragmentActivity implements ActionBar.TabListener {
ActionBar actionBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tab_test);
actionBar=getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
ActionBar.Tab tab1=actionBar.newTab();
tab1.setText("tab1");
tab1.setTabListener(this);
ActionBar.Tab tab2=actionBar.newTab();
tab2.setText("tab2");
tab2.setTabListener(this);
ActionBar.Tab tab3=actionBar.newTab();
tab3.setText("tab3");
tab3.setTabListener(this);
ActionBar.Tab tab4=actionBar.newTab();
tab4.setText("tab4");
tab4.setTabListener(this);
actionBar.addTab(tab1);
actionBar.addTab(tab2);
actionBar.addTab(tab3);
actionBar.addTab(tab4);
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
Log.d("VIVZ", "onTabReselected at "+" position "+tab.getPosition()+" name "+tab.getText());
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
Log.d("VIVZ", "onTabReselected at "+" position "+tab.getPosition()+" name "+tab.getText());
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
Log.d("VIVZ", "onTabReselected at "+" position "+tab.getPosition()+" name "+tab.getText());
}
}
你的主题显然是一个没有动作条的主题。由于您没有使用appcompat-v7,请确保您使用的主题支持本机操作栏,例如theme.Holo
系列之一
相反,如果您尝试使用appcompat-v7
,则需要从ActionBarActivity
继承,并且需要使用getSupportActionBar()
,而不是getActionBar()
还要注意的是,从Android 5.0开始,操作栏选项卡就被弃用了。你应该考虑另一个制表方案,如<代码> ViewPager <代码>和<代码> PagerTabStrip < /C> > < P>我在YouTube中遵循VIVZ示例,但是当方法被弃用时,我不得不另辟蹊径。尝试以下操作,而不是将选项卡添加到操作栏: 修改适配器:
public class CollectionPagerAdapter extends FragmentStatePagerAdapter {
private String[] titles = {"Item 1", "Item 2", "Item 3" };
public CollectionPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
switch(i){
case 0:
return new FragmentA();
case 1:
return new FragmentB();
case 2:
return new FragmentC();
}
return null;
}
@Override
public int getCount() {
return titles.length;
}
@Override
public CharSequence getPageTitle(int position) {
return titles[position];
}
}
在要实现选项卡的活动中,请尝试
public class Tabtest extends ActionBarActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tab_test);
ViewPager pager = (ViewPager) findViewById(R.id.your_view_pager);
pager.setAdapter(new CollectionPagerAdapter(getSupportFragmentManager()));
PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
tabs.setViewPager(pager);
}
现在,如果您想在标签名下设置一个移动指示器,并在用户滚动编译此库时移动,如Google Play store
compile 'com.astuetz:pagerslidingtabstrip:1.0.1'
并修改viewpager布局文件,如下所示:
<LinearLayout
//obviously add width and height and other necessery stuff
android:orientation="vertical">
<com.astuetz.PagerSlidingTabStrip
android:id="@+id/tabs"
android:layout_width="match_parent"
android:layout_height="48dip" />
<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" />
</LinearLayout>
然后你会得到想要的效果
希望对你有帮助 我终于找到了答案。
第一个是你的android sdk
<uses-sdk android:minSdkVersion="11" />
第三
不要在活动中使用此代码
requestWindowFeature(Window.FEATURE_NO_TITLE);
第四
在活动中使用import android.support.v4.app.ActionBar
而不是import android.support.v7.app.ActionBar
requestWindowFeature(Window.FEATURE_NO_TITLE);
第五
更改此actionBar=getActionBar()代码>到actionbar=getSupportActionBar()代码>您可以使用“PagerSlidingTastrip”替换“setNavigationMode”
这里是Github中的一个getActionBar()
的代码在哪里?这个答案可能会对您有所帮助。当我做这个项目时,我没有看到任何关于主题的东西,那么我如何选择一个呢?你能给我发一份关于ViewPager和PagerTabStrip@RashaadBryan:“那么我如何选择一个呢?”--在清单中的
和/或
元素中查找android:theme
属性。@RashaadBryan:关于ViewPager
和PagerTitleStrip
,这是我书中的一个示例应用程序:可能有一些教程,你可以通过搜索引擎找到。我在“样式”下检查,我的主题有一个操作栏,所以不应该有错误@CommonsWare@RashaadBryan:如果要使用基于主题.AppCompat
的内容,则需要继承ActionBarActivity
并使用getSupportActionBar()
,而不是getActionBar()
。
requestWindowFeature(Window.FEATURE_NO_TITLE);