public class MainActivity extends Activity implements OnClickListener{

     private Button button;
private EditText editText;
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(this);
editText = (EditText) findViewById(R.id.edit_text);
imageView = (ImageView) findViewById(R.id.image_view);
} @Override
public void onClick(View v){
switch(v.getId()){
case R.id.button:
Toast.makeText(MainActivity.this, editText.getText().toString(), Toast.LENGTH_LONG).show();
if (/*How to decide the image?*/)
imageView.setImageResource(R.drawable.wa2);
else imageView.setImageResource(R.drawable.ic_launcher);break;
}
}

目的:点击一下按钮,从一张图片切换到另一张

问题:如何知道此时imageView中是哪一张图片?

尝试:

1.

 if (imageView.getId()==R.drawable.ic_launcher) ...

无法切换

2.(idea from http://ask.csdn.net/questions/2010

if (((ImageView)v).getId() == R.drawable.ic_launcher)

程序炸掉了……

3.(idea from http://www.eoeandroid.com/thread-66050-1-1.html?_dsign=afedfe3c 3#)

if (imageView.getDrawable().getConstantState().equals(getResources().getDrawable(R.drawable.ic_launcher).getConstantState()))

可用

原理:Drawable.ConstantState抽象类保存的是不同Drawable对象共享资源的信息,即图片信息而非不同的对象信息

4.(idea from http://stackoverflow.com/questions/4526585/get-the-id-of-a-drawable-in-imageview

if (((Integer)((ImageView)v).getTag()).equals(R.drawable.ic_launcher))

又炸了……

查看Log:android.widget.Button cannot be cast to android.widget.ImageView

仔细读一下,发现原文是点击ImageView而非按钮……

修改代码如下

     @Override
public void onClick(View v){
switch(v.getId()){
case R.id.image_view:
Toast.makeText(MainActivity.this, editText.getText().toString(), Toast.LENGTH_LONG).show();
ImageView iv = (ImageView) v;
Integer integer = iv.getId();
integer = integer==null?0:integer;
if (integer == R.drawable.wa2||integer == 0){
imageView.setImageResource(R.drawable.wa2);
imageView.setTag(R.drawable.wa2);
}
else {
imageView.setImageResource(R.drawable.ic_launcher);
imageView.setTag(R.drawable.ic_launcher);
}break;
}
}

wrong code

点击图片不再炸,但图片不变;交换if内容后变一次不再变

log出图片信息和ImageView信息如图,发现都不一样……

然而发现接口就是这么定义的……一样就有鬼了

再仔细读一遍,其实代码核心就是getTag()和setTag()……前面全搞错了

最终修改代码如下:

        imageView.setOnClickListener(new OnClickListener(){
public void onClick(View v){
Toast.makeText(MainActivity.this, editText.getText().toString(), Toast.LENGTH_LONG).show();
ImageView iv = (ImageView) v;
Integer integer = (Integer)iv.getTag();
integer = integer==null?0:integer;
Log.d("intval",integer.toString());
Log.d("wa2val",((Integer)R.drawable.wa2).toString());
Log.d("icval",((Integer)R.drawable.ic_launcher).toString());
if (integer == R.drawable.wa2){
iv.setImageResource(R.drawable.ic_launcher);
iv.setTag(R.drawable.ic_launcher);
}
else {
iv.setImageResource(R.drawable.wa2);
iv.setTag(R.drawable.wa2);
}
}
});
}

点击按钮和图片均正常工作

总结:两种思路,都是获取不变量  1)获取图片本身的不变量:利用drawable.constantState  2)手动设置不变量:为imageView设置tag

如何获取imageView中当前内容的相关信息并比较?的更多相关文章

  1. 使用Java或 JavaScript获取 方括号中的内容

    1.使用Java获取方括号中的内容 String str = "[你]们,[我]们,[他]们,都要[好好学习,天天敲代码]"; Pattern p = Pattern.compil ...

  2. MSSQL·查询数据库中所有索引的相关信息

    阅文时长 | 0.45分钟 字数统计 | 784字符 主要内容 | 1.引言&背景 2.声明与参考资料 『MSSQL·查询数据库中所有索引的相关信息』 编写人 | SCscHero 编写时间 ...

  3. iPhone开发--正则表达式获取字符串中的内容

    缘起: 想获取字符串中指定的字符,考虑用正则表达式,遂写了如下的代码: NSString *htmlStr = @"oauth_token=1a1de4ed4fca40599c5e5cfe0 ...

  4. 获取手机中已安装apk文件信息(PackageInfo、ResolveInfo)(应用图片、应用名、包名等)

    众所周知,通过PackageManager可以获取手机端已安装的apk文件的信息,具体代码如下: PackageManager packageManager = this.getPackageMana ...

  5. kettle 利用 HTTP Client 获取猫眼电影API近期上映相关信息,并解析json

    前言 Kettle 除了常规的数据处理之外,还可以模拟发送HTTP client/post ,REST client. 实验背景 这周二老师布置了一项实验: 建立一个转换,实现一个猫眼API热映电影的 ...

  6. 获取html 中的内容 将前台的数据获取到后台

    使用js创建一个form表单 ,使用post上传到后台中 下面是代码.在获取html内容的时候使用了js节点来获取内容. parent:父节点.上一级的节点 siblings:兄弟节点.同一级别的节点 ...

  7. 获取html 中的内容 将前台的数据获取到后台 用 jquery 生成一个 form表单 提交数据

    使用js创建一个form表单 ,使用post上传到后台中 下面是代码.在获取html内容的时候使用了js节点来获取内容. parent:父节点.上一级的节点 siblings:兄弟节点.同一级别的节点 ...

  8. json通过后台获取数据库中的内容,并在前端进行显示

    fastjson.jar以及Echarts树图的js文件(需要在servlet对json进行赋值,所以需要用到json的插件) 链接:https://pan.baidu.com/s/1GBbamPNG ...

  9. yii框架通过http协议获取地址栏中的内容

    //创建一个控制器 <?php namespace frontend\controllers; use frontend\models\Zhuce; use Yii; use yii\web\C ...

随机推荐

  1. Azkaban 2.5.0 搭建

    一.前言 最近试着参照官方文档搭建 Azkaban,发现文档很多地方有坑,所以在此记录一下. 二.环境及软件 安装环境: 系统环境: ubuntu-12.04.2-server-amd64 安装目录: ...

  2. iOS学习14之OC NSNumber + NSValue

    1.NSNumber 数值类. 作用:实现基本数据类型与OC对象类型的相互转化. 1> NSNumber创建对象 // 初始化方法 NSNumber *num1 = [[NSNumber all ...

  3. Start_Learning_Python 03 条件、循环

    if循环 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 条件语句和循环语句可以有 else 子句,它在穷尽列表(以for循环)或条件变为 false ...

  4. BZOJ2652 : 三角板

    首先旋转坐标系,假设$(x,y)$被$(X,Y)$遮挡等价于$X\leq x$且$Y\leq y$. 对于每种坐标系建立两棵线段树: 第一棵按$x$维护已经加入的点的$y$的最小值: 第二棵按$x$维 ...

  5. BZOJ3424 : Poi2013 Multidrink

    详细做法以及证明请看论文<Hamiltonian paths in the square of a tree>. 首先将1到n的路径提取出来,作为主干. 定义毛毛虫为去掉叶子之后只有一条单 ...

  6. [转]crontab命令指南

    原文链接:http://www.cnblogs.com/peida/archive/2013/01/08/2850483.html 前一天学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划 ...

  7. No configuration found for the specified action解决办法

    http://blog.csdn.net/carefree31441/article/details/4857546 使用Struts2,配置一切正常,使用常用tag也正常,但是在使用<s:fo ...

  8. DBLINK 创建的注意事项

    摘自:http://blog.csdn.net/xulei_19850322/article/details/8219023 配置DBLINK细节很重要,请重点关注下面几点 1.确定被连接数据库可以连 ...

  9. jquery js javascript select 无限级 插件 优化foxidea版

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. Debug与Release的区别

    Debug版本包括调试信息,所以要比Release版本大很多(可能大数百K至数M).至于是否需要DLL支持,主要看你采用的编译选项.如果是基于ATL的,则Debug和Release版本对DLL的要求差 ...