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. eclipse 和 android studio 打包签名apk问题

    首先,我使用eclipse打包了一个签名apk 然后,我使用同一个签名文件在android studio 打包同一个项目 接下来,首先安装eclipse 打包的apk,然后安装android stud ...

  2. uva10106(大数乘法)

    public class Product { public static void main(String[] args){ Scanner sc = new Scanner(new Buffered ...

  3. 【Oracle】表空间容量修改

    -- 查看表空间容量 SELECT UPPER(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)", ...

  4. 【BZOJ】3105: [cqoi2013]新Nim游戏

    http://www.lydsy.com/JudgeOnline/problem.php?id=3105 题意:k堆火柴,先手和后手在第一次拿的时候都能拿若干整堆火柴(但不能拿完),之后和nim游戏规 ...

  5. Linux之网络配置(不断更新中)

    ========================================================================================== 配置文件 ==== ...

  6. Enumerators and Enumerable

    Next week task is to learn how generic enumeration interface works, try to build a sample and write ...

  7. sql 将字符串转换为表

    我们常常碰到需要将用户输入之字符串依特定的分隔符转换为表的一个栏位,下面是我写的一个sql函数.如能灵活运用则用途广泛. -- ==================================== ...

  8. PCL Show Point Cloud 显示点云

    在使用PCL库的时候,经常需要显示点云,可以用下面这段代码: #include <pcl/visualization/cloud_viewer.h> pcl::PointCloud< ...

  9. django1.9 创建项目和app并初始化项目

    创建项目: django-admin startproject  mytest04 创建app: python manage.py startapp app04 配置:settings.py 1. 2 ...

  10. 第1章 Bootstrap介绍

    学习网址:http://www.bootcss.com/ 下载网址:http://v3.bootcss.com/ 下载后一共三个文件夹 css js fonts 引入的文件 <link rel= ...