android 中关于在 ActionBar 上包含 SwipedTabs 的问题

Issue on including SwipedTabs on ActionBar in android

我只想在屏幕上包含 SwipedTabs。所以我在没有像这样的 TabListeners 的情况下编写代码,

`

package com.example.swipetabexample;

 import android.app.ActionBar;

 import android.os.Bundle;
 import android.support.v4.app.FragmentActivity;
 public class MainActivity extends FragmentActivity
{

    ActionBar ab;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        ab = getActionBar();
        ActionBar.Tab at= ab.newTab();
        at.setText("Tab1");
        ab.addTab(at);

    }
}


    <android.support.v4.view.ViewPager

     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/pager"
     android:layout_height="match_parent"
     android:layout_width="match_parent">

</android.support.v4.view.ViewPager>`

当我 运行 这段代码时,我总是 error.But 我检查了一遍又一遍,但我找不到问题所在。我发现很多博客他们也像这样实现了滑动标签,但带有带有 TabListener 的片段。 但首先,我只想在屏幕上看到选项卡。 这里我给出了Logcat

所示的错误
01-20 14:52:12.264: E/AndroidRuntime(1233): FATAL EXCEPTION: main

01-20 14:52:12.264: E/AndroidRuntime(1233): 进程: com.example.swipetabexample, PID: 1233 01-20 14:52:12.264: E/AndroidRuntime(1233): java.lang.RuntimeException: 无法启动 activity ComponentInfo{com.example.swipetabexample/com.example.swipetabexample.MainActivity}: java.lang.IllegalStateException: 操作栏选项卡必须有一个回调 01-20 14:52:12.264: E/AndroidRuntime(1233): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 01-20 14:52:12.264: E/AndroidRuntime(1233): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 01-20 14:52:12.264: E/AndroidRuntime(1233): 在 android.app.ActivityThread.access$800(ActivityThread.java:135) 01-20 14:52:12.264: E/AndroidRuntime(1233): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 01-20 14:52:12.264: E/AndroidRuntime(1233): 在 android.os.Handler.dispatchMessage(Handler.java:102) 01-20 14:52:12.264: E/AndroidRuntime(1233): 在 android.os.Looper.loop(Looper.java:136) 01-20 14:52:12.264: E/AndroidRuntime(1233): 在 android.app.ActivityThread.main(ActivityThread.java:5017) 01-20 14:52:12.264:E/AndroidRuntime(1233):在 java.lang.reflect.Method.invokeNative(本机方法) 01-20 14:52:12.264: E/AndroidRuntime(1233): 在 java.lang.reflect.Method.invoke(Method.java:515) 01-20 14:52:12.264: E/AndroidRuntime(1233): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 01-20 14:52:12.264: E/AndroidRuntime(1233): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 01-20 14:52:12.264: E/AndroidRuntime(1233): 在 dalvik.system.NativeStart.main(本机方法) 01-20 14:52:12.264: E/AndroidRuntime(1233): Caused by: java.lang.IllegalStateException: Action Bar Tab 必须有回调 01-20 14:52:12.264: E/AndroidRuntime(1233): 在 com.android.internal.app.ActionBarImpl.configureTab(ActionBarImpl.java:478) 01-20 14:52:12.264: E/AndroidRuntime(1233): 在 com.android.internal.app.ActionBarImpl.addTab(ActionBarImpl.java:504) 01-20 14:52:12.264: E/AndroidRuntime(1233): 在 com.android.internal.app.ActionBarImpl.addTab(ActionBarImpl.java:492) 01-20 14:52:12.264: E/AndroidRuntime(1233): 在 com.example.swipetabexample.MainActivity.onCreate(MainActivity.java:25) 01-20 14:52:12.264: E/AndroidRuntime(1233): 在 android.app.Activity.performCreate(Activity.java:5231) 01-20 14:52:12.264: E/AndroidRuntime(1233): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 01-20 14:52:12.264: E/AndroidRuntime(1233): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 01-20 14:52:12.264: E/AndroidRuntime(1233): ... 11 更多 01-20 16:59:43.564: D/dalvikvm(1368): GC_FOR_ALLOC 释放 77K,5% 释放 3415K/3568K,暂停 26ms,总计 26ms 01-20 16:59:43.572: D/dalvikvm(1368): GC_FOR_ALLOC 释放 3K,5% 释放 3633K/3792K,暂停 2ms,总计 5ms 01-20 16:59:43.592:I/dalvikvm-heap(1368):将堆(碎片情况)增加到 6.039MB,分配 2536932 字节 01-20 16:59:43.600: D/dalvikvm(1368): GC_FOR_ALLOC 释放 <1K,3% 释放 6111K/6272K,暂停 8ms,总计 8ms 01-20 16:59:43.664: D/AndroidRuntime(1368): 关闭虚拟机 01-20 16:59:43.668: W/dalvikvm(1368): threadid=1: 线程退出并出现未捕获的异常 (group=0xa4ce3b20) 01-20 16:59:43.668: E/AndroidRuntime(1368): 致命异常: main 01-20 16:59:43.668: E/AndroidRuntime(1368): 过程: com.example.swipetabexample, PID: 1368 01-20 16:59:43.668: E/AndroidRuntime(1368): java.lang.RuntimeException: 无法启动 activity ComponentInfo{com.example.swipetabexample/com.example.swipetabexample.MainActivity}: java.lang.IllegalStateException: 操作栏选项卡必须有一个回调 01-20 16:59:43.668: E/AndroidRuntime(1368): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 01-20 16:59:43.668: E/AndroidRuntime(1368): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 01-20 16:59:43.668: E/AndroidRuntime(1368): 在 android.app.ActivityThread.access$800(ActivityThread.java:135) 01-20 16:59:43.668: E/AndroidRuntime(1368): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 01-20 16:59:43.668: E/AndroidRuntime(1368): 在 android.os.Handler.dispatchMessage(Handler.java:102) 01-20 16:59:43.668: E/AndroidRuntime(1368): 在 android.os.Looper.loop(Looper.java:136) 01-20 16:59:43.668: E/AndroidRuntime(1368): 在 android.app.ActivityThread.main(ActivityThread.java:5017) 01-20 16:59:43.668:E/AndroidRuntime(1368):在 java.lang.reflect.Method.invokeNative(本机方法) 01-20 16:59:43.668: E/AndroidRuntime(1368): 在 java.lang.reflect.Method.invoke(Method.java:515) 01-20 16:59:43.668: E/AndroidRuntime(1368): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 01-20 16:59:43.668: E/AndroidRuntime(1368): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 01-20 16:59:43.668: E/AndroidRuntime(1368): 在 dalvik.system.NativeStart.main(本机方法) 01-20 16:59:43.668: E/AndroidRuntime(1368): Caused by: java.lang.IllegalStateException: Action Bar Tab 必须有回调 01-20 16:59:43.668: E/AndroidRuntime(1368): 在 com.android.internal.app.ActionBarImpl.configureTab(ActionBarImpl.java:478) 01-20 16:59:43.668: E/AndroidRuntime(1368): 在 com.android.internal.app.ActionBarImpl.addTab(ActionBarImpl.java:504) 01-20 16:59:43.668: E/AndroidRuntime(1368): 在 com.android.internal.app.ActionBarImpl.addTab(ActionBarImpl.java:492) 01-20 16:59:43.668: E/AndroidRuntime(1368): 在 com.example.swipetabexample.MainActivity.onCreate(MainActivity.java:23) 01-20 16:59:43.668: E/AndroidRuntime(1368): 在 android.app.Activity.performCreate(Activity.java:5231) 01-20 16:59:43.668: E/AndroidRuntime(1368): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 01-20 16:59:43.668: E/AndroidRuntime(1368): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 01-20 16:59:43.668: E/AndroidRuntime(1368): ... 11 更多

请在创建时添加以下代码

 getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

// Create a tab listener that is called when the user changes tabs.
ActionBar.TabListener tabListener = new ActionBar.TabListener() {
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {
        // show the given tab
    }

    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
        // hide the given tab
    }

    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
        // probably ignore this event
    }
};




 ab = getActionBar();
    ActionBar.Tab at= ab.newTab();
    at.setText("Tab1");
    ab.addTab(at).setTabListener(tabListener);

最后我通过 Eclipse Bydefault 代码生成器得到了相同的代码。通过选择选项 TabActivity 而不是选择 BlankActivity。