我正在尝试在我的Android应用中开发滑动标签。我用Google搜索并尝试自己实现它。这是我做的:
MainActivity.java:
package com.example.shiza.swipetabs;
import android.app.ActionBar;
import android.app.FragmentTransaction;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Window;
public class MainActivity extends FragmentActivity implements ActionBar.TabListener{
ActionBar bar;
ViewPager viewPager;
FragmentPageAdapter ft;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
setContentView(R.layout.activity_main);
// viewPager = new ViewPager(this);
viewPager.setId(R.id.pager);
setContentView(viewPager);
ft = new FragmentPageAdapter(getSupportFragmentManager());
viewPager.setAdapter(ft);
bar = getActionBar();
try {
bar.setHomeButtonEnabled(false);
} catch (Exception e) {
e.printStackTrace();
}
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
bar.addTab(bar.newTab().setText("A").setTabListener(this));
bar.addTab(bar.newTab().setText("B").setTabListener(this));
bar.addTab(bar.newTab().setText("C").setTabListener(this));
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
bar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
}
FragmentPageAdapter.java:
package com.example.shiza.swipetabs;
//import android.app.FragmentManager;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
/**
* Created by Shiza on 11-06-2015.
*/
public class FragmentPageAdapter extends FragmentPagerAdapter{
public FragmentPageAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position)
{
case 1:
return new Fragment_a();
case 2:
return new Fragment_b();
case 3:
return new Fragment_c();
}
return null;
}
@Override
public int getCount() {
return 3;
}
}
一切都很好,但是当我收到以下警告时:
Method invocation 'bar.setHomeButtonEnabled(false)' may produce 'java.lang.NullPointerException
在运行时,我在同一行得到NullPointerException
我在StackOverflow上搜索了它,并且知道我需要使用v7.support
库。我无法实现这一点。它看起来像......
bar = getActionBar();
...返回null
。除此之外,我得到了许多弃用的方法。请给我一个更好的教程。我正在接受https://stackoverflow.com/a/11903863的帮助。我已经在SO上尝试了所有解决方案,但它们都没有工作。请帮我解决这个问题。
答案 0 :(得分:0)
如果您的MainActivity扩展 ActionBarActivity ,那么您的getActionBar();将有空。
我认为你的例子有点老了。您可以尝试使用Android Studio {/ 3>} this example