【问题标题】:Issue on including SwipedTabs on ActionBar in android关于在 Android 中的 ActionBar 上包含 SwipedTabs 的问题
【发布时间】:2015-01-20 15:26:44
【问题描述】:

我只想在屏幕上包含 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>`

当我运行这段代码时,我发现总是错误。但我一次又一次地检查,但我找不到问题所在。我发现很多博客他们也实现了这样的滑动标签,但带有 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: 无法启动活动 ComponentInfo{com.example.swipetabexample/com.example.swipetabexample.MainActivity}: java.lang.IllegalStateException: Action Bar Tab 必须有一个回调 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(Native Method) 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): at dalvik.system.NativeStart.main(Native Method) 01-20 14:52:12.264:E/AndroidRuntime(1233):原因:java.lang.IllegalStateException:操作栏选项卡必须有回调 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 释放

【问题讨论】:

  • 你到底遇到了什么错误?
  • 是的,当在模拟器上运行程序时,它说,“不幸的是,SwipeTabexample 停止工作”,而 Logcat 中显示的其他错误在上面的帖子中。

标签: android eclipse android-fragments


【解决方案1】:

请在创建时添加以下代码

 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);

【讨论】:

  • 我得到了运行时异常以及我在 LogCat 中看到并在我的问题中发布的错误。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多