为什么我必须将getSupportActionBar()用于扩展AppCompatActivity的活动?

时间:2016-01-07 01:11:36

标签: java android

您好我不确定为什么在使用getActionBar().setTitle("test")时出现错误,但是当我使用getSupportActionBar().setTitle("test")时,一切正常。所以我做了一些研究,发现我必须使用getSupportActionBar()来扩展AppCompatActivity的活动。

  1. 我不太确定为什么会这样,想要解释一下?

  2. 为什么我不能import android.app.ActionBar然后使用getActionBar()(我尝试了这个并使用setTitle()方法。它返回Attempt to invoke virtual method 'void android.app.ActionBar.setTitle(java.lang.CharSequence)' on a null object reference)?< / p>

  3. 我很清楚Toolbar的存在,但我想使用ActionBar来实现向后兼容。

3 个答案:

答案 0 :(得分:2)

  1. AppCompatActivity是旧版Android的活动,直到最新版本。因此,如果您的targer应用程序是android 2.3 - 6.0,则必须扩展appcompactactivity而不仅仅是普通活动。和方法getActionBar旨在与活动一起使用。 getSupportActionBar旨在与appCompactActivity一起使用

  2. 您导入的是来自其他项目的类,而不是您的活动中已初始化的实际对象。并且在您的活动中,您没有初始化您导入的类,然后它变为NPE(空指针异常)

答案 1 :(得分:1)

使用AppCompatActivity代替ActionBarActivity是正确的方法。不推荐使用正常用法,因为AppCompatActivity提供了您想要的向后兼容性。

您不应该知道Toolbar,因为Toolbar完全支持AppCompat,并且具有与框架小部件相同的功能和API。在AppCompat中,Toolbarandroid.support.v7.widget.Toolbar类中实现。

一些参考资料:

答案 2 :(得分:0)

逻辑是操作栏用于材料设计,工具栏用于材料设计。

两者并不共存。我的意思是你不能在邮政材料设计时代使用行动吧。

您可以比较设备版本并相应地切换,或者简单地使用supportedtoolbar,它在内部为您完成。