【问题标题】:Android: How to change drawable depending on list item selectedAndroid:如何根据选择的列表项更改可绘制对象
【发布时间】:2011-04-11 18:40:59
【问题描述】:

我的问题:向用户显示一个列表视图,显示动物列表,根据选择的项目,下一个活动将向用户显示所选动物的图像。

到目前为止,我的方法是传递所选列表项的位置:

intent.putExtra("position_on_list", position)

并在下一个活动中获得额外内容。

这就是我感到困惑的地方。如何根据所选动物动态显示图片?我尝试了 if 语句方法;

if(position == 0){
   ImageView icon = (ImageView)view.findViewById(R.id.animalImg)
   icon.setImageResource(R.drawable.tiger)
}

但是,当我运行应用程序时,这会导致错误。有人可以为我指出正确的方向,告诉我如何正确执行此操作。

谢谢。

【问题讨论】:

  • “这会导致我在运行应用程序时出错”您好 Jnanathan,您能帮我们吗?我们无法猜测您得到的错误!请使用 Eclipse 中的 logcat 工具并给我们错误!我很确定您只需阅读此日志 Cheers 就会自己发现错误。
  • 你得到的错误是什么?它是否进入 if 语句?
  • 大家好,logcat 没有报错,我从硬件运行它,它给出了“意外停止”的错误。你认为我用这种方法走在正确的道路上吗?
  • 我相信 DDMS 会给您设备日志中的错误。或者在模拟器中运行它并给我们来自 LogCat 的错误。

标签: android listview drawable


【解决方案1】:

就您的错误而言,如果没有有关错误的任何详细信息,它可能是任何东西......

我认为 if 语句很好,您可能希望使用 default: 作为 switch 语句。

switch (position){
 case 0:
 break;
 default:
 break;
}

我个人喜欢的另一个选项是将您的图像放在 arrays.xml 资源文件中并创建一个 TypedArray,它更干净,更适合 Android。

arrays.xml 文件看起来像这样

<?xml version="1.0" encoding="utf-8"?>
 <resources>
        <string-array name="animals">
        <item>@drawable/tiger</item>
        <item>@drawable/bear</item>
        <item>@drawable/...</item>
    </string-array>
</resources>

你的活动会有这样的东西,没有开关或 ifs

TypedArray ar = getResources().obtainTypedArray(R.array.animals)));
ImageView icon = (ImageView)view.findViewById(R.id.animalImg)
icon.setImageResource(ar.getResourceId(position, -1));

【讨论】:

  • 嗨,Sadboy,我已经尝试了这两种方法,但仍然抛出错误!读取 FATAL EXCEPTION: java.lang.runtime 异常的错误,由 java.lang.NullPointerException 引起。关于什么的任何想法问题可能是,在过去的几个小时里我一直在试图解决这个问题,但一无所获..
  • 也许您可以通过在创建意图时放置断点和设置,在新活动的 onCreate 中,然后在设置图像时放置断点和设置来调试并查看它在哪一行引发异常资源......它有什么意义?或者暂时将它们全部包装在 try catch 语句中并写出异常或在 catch 查看异常时中断。
  • 听起来不像一个懒惰的@ss,我是一个新手 eclipse 用户,如果没有时间,我不知道如何进行这样的程序,我目前没有很多东西!我有将问题缩小到一个奇怪的事件 - 设置图像资源甚至不能以“简单”的方式完成,我的意思是传统的 icon.setImageResource(R.drawable.tiger),非常奇怪,非常令人沮丧。
  • SadBoy,我已经找到问题所在了!行:ar = getResources().obtainTypedArray(...) 应该使用“this”引用,即 this.getResources()...我不会很快忘记这一点。再次感谢您为我指明正确的方向。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多