【问题标题】:How to add Tabs to ActionBar for Swipe Tabs?如何为滑动选项卡添加选项卡到操作栏?
【发布时间】:2015-05-11 10:14:36
【问题描述】:

我想用ActionBar 创建两个滑动标签。

这是我的代码:

import android.app.ActionBar;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import com.rastari.salar.mymetarialbank.R;

/**
 * Created by Salar on 9/5/2015.
 */
public class AccountsActivityChart extends FragmentActivity implements ActionBar.TabListener {

    ActionBar actionBar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chart);

        actionBar=getActionBar();
        actionBar.setNavigationMode(actionBar.NAVIGATION_MODE_TABS);

        //Add the Action Bar Tabs
        actionBar.addTab(actionBar.newTab().setText("Accounts Activity"+"Chart Activity").setTabListener(this));

    }


    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {

    }

    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {

    }

    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {

    }
}

当我运行应用程序时出现此错误:

> 05-11 06:09:28.013    2371-2371/? E/AndroidRuntime﹕ FATAL EXCEPTION:
> main
>     Process: com.rastari.salar.mymetarialbank, PID: 2371
>     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.rastari.salar.mymetarialbank/com.rastari.salar.mymetarialbank.activity.AccountsActivityChart}:
> java.lang.NullPointerException: Attempt to invoke virtual method 'void
> android.app.ActionBar.setNavigationMode(int)' on a null object
> reference
>             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
>             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
>             at android.app.ActivityThread.access$800(ActivityThread.java:151)
>             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
>             at android.os.Handler.dispatchMessage(Handler.java:102)
>             at android.os.Looper.loop(Looper.java:135)
>             at android.app.ActivityThread.main(ActivityThread.java:5254)
>             at java.lang.reflect.Method.invoke(Native Method)
>             at java.lang.reflect.Method.invoke(Method.java:372)
>             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
>             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
>      Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setNavigationMode(int)' on
> a null object reference
>             at com.rastari.salar.mymetarialbank.activity.AccountsActivityChart.onCreate(AccountsActivityChart.java:21)
>             at android.app.Activity.performCreate(Activity.java:5990)
>             at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
>             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
>             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
>             at android.app.ActivityThread.access$800(ActivityThread.java:151)
>             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
>             at android.os.Handler.dispatchMessage(Handler.java:102)
>             at android.os.Looper.loop(Looper.java:135)
>             at android.app.ActivityThread.main(ActivityThread.java:5254)
>             at java.lang.reflect.Method.invoke(Native Method)
>             at java.lang.reflect.Method.invoke(Method.java:372)
>             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
>             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 05-11
> 06:09:30.037      444-504/? E/InputDispatcher﹕ channel '155e1fbc
> com.rastari.salar.mymetarialbank/com.rastari.salar.mymetarialbank.activity.MainActivity
> (server)' ~ Channel is unrecoverably broken and will be disposed!
> 05-11 06:09:30.037      444-504/? E/InputDispatcher﹕ channel '2f2170b7
> com.rastari.salar.mymetarialbank/com.rastari.salar.mymetarialbank.activity.Login
> (server)' ~ Channel is unrecoverably broken and will be disposed!

我真的不知道我该怎么办! 请各位大神指导一下好吗? 非常感谢。

最新代码:

import android.support.v7.app.ActionBar
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import com.rastari.salar.mymetarialbank.R;

public class AccountsActivityChart extends ActionBarActivity implements ActionBar.TabListener {

    ActionBar actionBar;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chart);

        actionBar = getSupportActionBar();
        actionBar.setNavigationMode(actionBar.NAVIGATION_MODE_TABS);

        //Add the Action Bar Tabs
        actionBar.addTab(actionBar.newTab().setText("Accounts Activity"+"Chart Activity").setTabListener(this));
    }

    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) {

    }

    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {

    }

    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {

    }
}

【问题讨论】:

  • 查看此教程...这将对您有所帮助androidhive.info/2013/10/…
  • 使用本教程我得到这个错误:无法启动活动java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ActionBar.setHomeButtonEnabled(boolean)' on a null object reference

标签: android android-activity android-actionbar android-support-library android-tabs


【解决方案1】:

首先,您正在创建一个FragmentActivity 并期望看到一个ActionBar,这不会发生。

替换

AccountsActivityChart extends FragmentActivity

AccountsActivityChart extends ActionBarActivity

其次,你需要调用

actionBar = getSupportActionBar();

而不是

actionBar = getActionBar();

因为ActionBarActivityappcompat-v7 库的一部分。这就是当您调用 actionBar.setNavigationMode() 时您的应用程序崩溃的原因,因为 getActionBar()FragmentActivity 一起使用时会返回 null

这样做之后,你应该可以使用

actionBar.setNavigationMode(actionBar.NAVIGATION_MODE_TABS);

成功并在您的ActionBar 下查看可滑动标签。

编辑:

替换

import android.app.ActionBar

import android.support.v7.app.ActionBar 

【讨论】:

  • 非常感谢@Y.S.我已经做出了改变。当我将 actionBar=getActionBar() 更改为 actionBar=getSupportActionBar();此错误将显示:不兼容的类型:android.support.v7.app.ActionBar 无法转换为 android.app.ActionBar
  • 查看编辑后的答案,让我知道它是否适合您 :)
  • 不,它不起作用,我收到此错误:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.rastari.salar.mymetarialbank/com.rastari.salar.mymetarialbank.activity.AccountsActivityChart}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.app.ActionBar.setNavigationMode(int)' on a null object reference
  • 在问题中发布您的最新代码并在完成后向我发送更新:)
  • 谢谢 Y.S.为了在本教程link 中回答我,作者说 public class MainActivity extends FragmentActivity implements ActionBar.TabListener { 为什么你说使用这个:AccountsActivityChart extends ActionBarActivity
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多