我创建了一个包含ViewPager和Tabs等功能的应用。它在api 19级和姜饼和蜜糖以外的其他方面都很好用。应用程序在启动时崩溃。
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.FragmentTransaction;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class HomeActivity extends FragmentActivity implements ActionBar.TabListener
{
public ViewPager viewPager;
private PageAdapter mAdapter;
private ActionBar actionBar;
// Tab titles
private String[] tabs = { "Calculate EMI", "EMI Schedule"};
String TabFragmentSchedule;
public void setTabFragmentSchedule(String t){
TabFragmentSchedule = t;
}
public String getTabFragmentSchedule(){
return TabFragmentSchedule;
}
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
// Initilization
viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getActionBar();
mAdapter = new PageAdapter(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) {
}
});
}
//method that is called to swipe viewpage on button click from calculation fragment
public void switchToFragmentSchedule(){
// viewPager.setCurrentItem(1);
viewPager.setCurrentItem(1, false);
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
}
我收到以下错误
04-28 13:30:25.425: E/AndroidRuntime(712): FATAL EXCEPTION: main
04-28 13:30:25.425: E/AndroidRuntime(712): java.lang.NoSuchMethodError: android.app.ActionBar.setHomeButtonEnabled
04-28 13:30:25.425: E/AndroidRuntime(712): at com.initqube.cal_c.HomeActivity.onCreate(HomeActivity.java:53)
04-28 13:30:25.425: E/AndroidRuntime(712): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
04-28 13:30:25.425: E/AndroidRuntime(712): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1700)
04-28 13:30:25.425: E/AndroidRuntime(712): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1752)
04-28 13:30:25.425: E/AndroidRuntime(712): at android.app.ActivityThread.access$1500(ActivityThread.java:123)
04-28 13:30:25.425: E/AndroidRuntime(712): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:993)
04-28 13:30:25.425: E/AndroidRuntime(712): at android.os.Handler.dispatchMessage(Handler.java:99)
04-28 13:30:25.425: E/AndroidRuntime(712): at android.os.Looper.loop(Looper.java:126)
04-28 13:30:25.425: E/AndroidRuntime(712): at android.app.ActivityThread.main(ActivityThread.java:3997)
04-28 13:30:25.425: E/AndroidRuntime(712): at java.lang.reflect.Method.invokeNative(Native Method)
04-28 13:30:25.425: E/AndroidRuntime(712): at java.lang.reflect.Method.invoke(Method.java:491)
04-28 13:30:25.425: E/AndroidRuntime(712): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
04-28 13:30:25.425: E/AndroidRuntime(712): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
04-28 13:30:25.425: E/AndroidRuntime(712): at dalvik.system.NativeStart.main(Native Method)
请帮助
答案 0 :(得分:2)
您需要使用Support v7 library在旧设备上使用ActionBar
然后,您需要使用ActionBarActivity
代替FragmentActivity
和getSupportActionBar
而不是getActionBar