【问题标题】:Compatibility of getContext and getResource between 5.0 and lowergetContext 和 getResource 在 5.0 和更低版本之间的兼容性
【发布时间】:2014-12-18 20:07:29
【问题描述】:

您好,几个月前我发布了我的应用程序,一切都运行良好,并且在某种程度上仍然如此。在运行低于 android 5 的设备上一切正常。但是我今天在 5 台设备上进行了测试,我的 if 语句不起作用。例如,它将每个答案标记为不正确,但在较低的设备上,正确的不正确答案正在按预期工作。我知道我的代码可以工作,但我不知道为什么它不能在 android 5 上工作。我唯一能想到的是我在清单上遗漏了一些东西。

编辑:工作答案允许

之间的兼容性
 button.setOnClickListener(new OnClickListener(){

                    @TargetApi(Build.VERSION_CODES.LOLLIPOP) @Override
                    public void onClick(View arg0) {

    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
                            if (Word1.getDrawable().getConstantState().equals(Word1.getResources().getDrawable( R.drawable.img1).getConstantState())}}

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {        
                             if  (Word1.getDrawable().getConstantState().equals(Word1.getContext().getDrawable( R.drawable.img1).getConstantState())}}  }); 

【问题讨论】:

  • 您能否发布一个无效的 IF 语句示例?
  • 我添加了一个 if 语句。但我知道 if 语句有效,但由于某种原因在 android 5 上无效。如果需要,我有一个相同代码的视频
  • 你可以尝试使用.equals而不是==比较对象
  • 对棉花糖不起作用 :(

标签: android xml if-statement android-manifest


【解决方案1】:

您需要使用.equals 来比较对象。

==检查它是否是同一个对象而不是对象是否具有相同的值,更多信息here

您的代码应如下所示:

if(Word1.getDrawable().getConstantState().equals(getResources().getDrawable( R.drawable.img9).getConstantState())

【讨论】:

  • 您确定将所有的 == 替换为等于吗?因为通常与 == 比较时它不应该起作用,也许这在早期版本中以某种方式被容忍了,现在不再是了
  • 好的,我已将 == 更改为 .equals(我同意这是一种更好的方法),但同样的问题仍然存在。在我的 5.0 设备上,if simple 直接失败了。但是当我在我的 4.0 设备上测试时,一切都像以前一样按计划工作。知道为什么 if 语句会像这样被忽略吗?
  • @Phil3992 有什么理由比较ConstantState 而不是Drawable 本身?
  • 虽然这不是 excat 的答案,但 .equals 是一个很大的帮助。实际问题在于 .getResources 这适用于 4.0,但 .getcontext 需要 5.0
  • 找到了适用于所有版本的解决方案:stackoverflow.com/a/44633363/458365
猜你喜欢
  • 2016-05-11
  • 2014-08-04
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
  • 2022-07-22
  • 1970-01-01
  • 2013-01-28
  • 1970-01-01
相关资源
最近更新 更多