Android ImageView的onClickListener不起作用

问题描述:

我有一个ImageView,我想实现onClickListener。但是当我点击图片时,没有任何反应。事件Logcat不显示任何错误。Android ImageView的onClickListener不起作用

以下是我的import语句:

import android.view.View.OnClickListener; 

以下是图像我的布局代码:

<ImageView android:id="@+id/favorite_icon" 
    android:src="@drawable/small_star" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="top|right" android:paddingTop="63sp" 
    android:paddingRight="2sp" /> 

以下是我的活动代码定义的事件处理程序onClickListener:

ImageView imgFavorite = (ImageView) findViewById(R.id.favorite_icon); 
imgFavorite.setClickable(true); 
imgFavorite.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Log.i(SystemSettings.APP_TAG + " : " + HomeActivity.class.getName(), "Entered onClick method"); 
       Toast.makeText(v.getContext(), 
         "The favorite list would appear on clicking this icon", 
         Toast.LENGTH_LONG).show(); 
      } 
     }); 

我错过了什么。任何帮助,将不胜感激。

在此先感谢。

+2

@mahendraliya:不要在这里使用'getApplicationContext()'。使用'WhateverYourActivityIs.this',用您的活动名称替换'WhateverYourActivityIs'。此外,将某些内容记录到LogCat(例如'Log.w()')通常很有用,而不是依赖于Toast来进行这种诊断。 – CommonsWare 2011-05-21 18:35:09

+0

@CommonsWare:从更新中可以看到,我将“getApplicationContext()”更改为“HomeActivity.this”..并添加了一条Log语句..它仍然不起作用..我是否缺少特定于onClickListener的内容使用ImageView? – 2011-05-21 18:53:03

+0

@mahendraliya:“我是否缺少特定于onClickListener与ImageView一起使用的内容?” - 不,它应该工作得很好。 – CommonsWare 2011-05-21 18:57:16

好吧,

我设法解决这个棘手的问题。事情就像我使用FrameLayout。不知道为什么,但在我看来,这个图标可能会隐藏在其他观点背后。

我试图把图标放在布局的末尾,现在我可以看到Toast以及Log

谢谢大家抽出时间来解决..当时确实棘手的问题..

+2

这里同样的事情,但与RelativeLayout。将ViewView移动到最后,在显示RelativeView的主要内容的View之后解决了问题。并且将ImageView设置为可点击并不是必需的。 – spaaarky21 2013-07-30 17:34:11

+0

或者您可以在设置onClickListener之前使用yourImageView.bringToFront()。 – Houcine 2016-01-21 01:50:14

+0

This works great ..'非常感谢你.. – Neela 2016-06-17 18:50:15

试图通过传递上下文,而不是应用程序上下文的(你也可以添加一个日志语句来检查onClick方式曾经运行):

imgFavorite.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.d("== My activity ===","OnClick is called"); 
      Toast.makeText(v.getContext(), // <- Line changed 
        "The favorite list would appear on clicking this icon", 
        Toast.LENGTH_LONG).show(); 
     } 
    }); 
+1

我尝试使用v.getContext()并添加日志语句..但既不显示日志也不显示Toast ..我不明白问题出在哪里。 – 2011-05-21 18:55:58

你可以试试这个,告诉我发生了什么? ? :

ImageView imgFavorite = (ImageView) findViewById(R.id.favorite_icon); 
imgFavorite.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Toast.makeText(YourActivityName.this, 
       "The favorite list would appear on clicking this icon", 
       Toast.LENGTH_LONG).show(); 
    } 
}); 

,或者你应该补充一点:

imgFavorite.setClickable(true); 
+0

我试过这个改变,但似乎没有工作.. – 2011-05-21 18:54:58

+0

看到我的编辑@mahendraliya – Houcine 2011-05-21 19:06:00

+1

我试过使用imgFavorite.setClickable(true);但这也不能解决问题 – 2011-05-21 19:10:34

对于内部类传递活动的参考,我通常创建的onCreate(一个活动的参考),并为成员。由于内部类可以访问父类的成员,你可以得到你的活动举行,因此,其背景:

class MyClass extends Activity{ 
    private Activity thisActivity; 
    @Override 
protected void onCreate(Bundle savedInstanceState) { 
      thisActivity = this; 
    } 
} 

希望有所帮助。

+2

普通的内部类已经可以访问'this' - 为它添加一个数据成员是不必要的。 – CommonsWare 2011-05-21 18:56:37

+0

但是内部类中的'this'会不会指向内部类的对象,它将外部类的对象包含在内部?或者你说有一种方法可以通过它在内部类中实际访问外部类的实例? – anargund 2011-05-23 04:00:55

+2

'MyClass.this'引用特定封闭外部类的'this'。 – CommonsWare 2011-05-23 11:05:28

有同样的问题,感谢的FrameLayout小费! 我用在的FrameLayout两个重叠图像(一个在顶端呈alpha掩码,得到软边界的效应)

我在XML android:clickable="true"用于图像设定我想启动onClickListener,和android:clickable="false"到alpha蒙版。

我为一个按钮的OnClickListener定义了一个用于ImageView的OnClickListener,它似乎工作正常。这是我的。请尝试让我们知道它是否无效。

final ImageView imageview1 = (ImageView) findViewById(R.id.imageView1); 

imageview1.setOnClickListener(new Button.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     try { 
      Log.i("MyTag","Image button is pressed, visible in LogCat");; 
     } catch (Exception e) { 
      Log.e(TAG, e.toString()); 
     } 
    } 
}); 

添加安卓的onClick = “clickEvent”到您的图像视图。

<ImageView android:id="@+id/favorite_icon" 
    android:src="@drawable/small_star" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="top|right" android:paddingTop="63sp" 
    android:paddingRight="2sp" 
    android:onClick="clickEvent" /> 

在你的活动,你可以创建具有相同的名称(clickEvent(视图V))的方法,这就是它!你也可以看到日志和吐司文本。

public void clickEvent(View v) 
    { 
    Log.i(SystemSettings.APP_TAG + " : " + HomeActivity.class.getName(), "Entered onClick method"); 
    Toast.makeText(v.getContext(), 
      "The favorite list would appear on clicking this icon", 
      Toast.LENGTH_LONG).show(); 
    } 

那么我的解决方案是一个又一个,或让我们说,错误是:

我根本就与另一<included />两次微胶囊XML布局相同的ID,这是一个前发现了另一个ImageView的我想对点击做出反应。解决方案:给他们另一个ID之一...

检查是否有其他视图具有以下属性:match_parentfill_parent,这些属性可以覆盖你ImageView已在您的RelativeLayout。通过的方式显示,接受的答案不工作我的情况。

其实我只是使用imgView.bringToFront();它有帮助。

+0

我不知道为什么,但它对我有用!谢谢! – 2016-07-28 10:06:38

同样的事情发生在我身上。

原因是:我使用了带有页边空白的列表视图,因此数据从图像的底部开始,但实际的列表视图在不可见的图像上重叠。所以,即使我们点击图片,操作也不会执行。为了解决这个问题,我使列表视图从图像的下面开始,以便它不与图像本身重叠。