【问题标题】:Android ActionBar not visibleAndroid ActionBar 不可见
【发布时间】:2015-02-23 12:22:07
【问题描述】:

我已经更新了 API 21、工具和附加功能,一些项目中的 ActionBar 已经不可见。我执行了以下代码,但应用程序崩溃显示 NullPointerException。

ActionBar actionBar = getActionBar();
actionBar.show();

Logcat 输出

02-23 18:03:36.269: E/AndroidRuntime(3327): 致命异常: main 02-23 18:03:36.269: E/AndroidRuntime(3327): 进程: com.example.twaapp, PID: 3327 02-23 18:03:36.269: E/AndroidRuntime(3327): java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.example.twaapp/com.example.twaapp.MainActivity}: java.lang.NullPointerException 02-23 18:03:36.269: E/AndroidRuntime(3327): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2198) 02-23 18:03:36.269: E/AndroidRuntime(3327): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257) 02-23 18:03:36.269: E/AndroidRuntime(3327): 在 android.app.ActivityThread.access$800(ActivityThread.java:139) 02-23 18:03:36.269: E/AndroidRuntime(3327): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210) 02-23 18:03:36.269: E/AndroidRuntime(3327): 在 android.os.Handler.dispatchMessage(Handler.java:102) 02-23 18:03:36.269: E/AndroidRuntime(3327): 在 android.os.Looper.loop(Looper.java:136) 02-23 18:03:36.269: E/AndroidRuntime(3327): 在 android.app.ActivityThread.main(ActivityThread.java:5086) 02-23 18:03:36.269: E/AndroidRuntime(3327): 在 java.lang.reflect.Method.invokeNative(Native Method) 02-23 18:03:36.269: E/AndroidRuntime(3327): 在 java.lang.reflect.Method.invoke(Method.java:515) 02-23 18:03:36.269: E/AndroidRuntime(3327): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 02-23 18:03:36.269: E/AndroidRuntime(3327): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 02-23 18:03:36.269: E/AndroidRuntime(3327): at dalvik.system.NativeStart.main(Native Method) 02-23 18:03:36.269: E/AndroidRuntime(3327): 由: java.lang.NullPointerException 引起 02-23 18:03:36.269: E/AndroidRuntime(3327): at com.example.twaapp.MainActivity.onCreate(MainActivity.java:82) 02-23 18:03:36.269: E/AndroidRuntime(3327): 在 android.app.Activity.performCreate(Activity.java:5248) 02-23 18:03:36.269: E/AndroidRuntime(3327): 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110) 02-23 18:03:36.269: E/AndroidRuntime(3327): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2162) 02-23 18:03:36.269: E/AndroidRuntime(3327): ... 11 更多

如何让AB可见?

【问题讨论】:

  • 你也可以粘贴 logcat 吗?
  • 检查应用的主题
  • @vs.thaakur 我尝试更改主题,但没有任何效果
  • 你在使用android.support.v7.widget.Toolbar吗? API 21 没有默认操作栏
  • 使用 getSupportActionBar() 代替 getActionBar()

标签: java android android-layout android-actionbar android-view


【解决方案1】:

你的Activity 类应该像这样扩展:

public class MainActivity extends ActionBarActivity{

    ....

}

而不是

public class MainActivity extends FragmentActivity{

    ....

}

另外,你需要打电话

ActionBar = getSupportActionBar();

而不是

ActionBar = getActionBar();

试试这个。这将起作用。

【讨论】:

  • 你是对的,通过ActionBarActivity扩展后可见:)谢谢
  • 当然也是如此,对于我的问题,Ist ​​更准确:)
【解决方案2】:

确保您的活动扩展了ActionBarActivity。像这样:MainActivity extends ActionBarActivity。我发现当我删除它并扩展其他内容时,操作栏会消失。还要检查 xml 的主题并更改它。

看看这个:

can I use a compatible action bar AND a fragment in the same activity?

【讨论】:

  • AB 在我用 FragmentActivity 扩展 MyActivity 时可见,最近更新后,我失去了 AB 可见性
  • 尝试在你的 android xml 中更改主题
  • 很高兴为您提供帮助:)
【解决方案3】:

如果您使用的是 Activity 类,那么您的最小 SDK 应该大于 13 以显示操作栏。否则使用 Android 支持库中的 ActionbarActivity 使您的应用向后兼容并使用 getSupportActionBar() 获取操作栏实例

【讨论】:

  • 谢谢,被ActionBarActivity扩展后可见:)
【解决方案4】:

由于不推荐使用ActionBarActivity,因此应使用AppCompatActivity。作为-

public class LoginActivity extends AppCompatActivity{

}

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多