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();
}
});
我错过了什么。任何帮助,将不胜感激。
在此先感谢。
好吧,
我设法解决这个棘手的问题。事情就像我使用FrameLayout
。不知道为什么,但在我看来,这个图标可能会隐藏在其他观点背后。
我试图把图标放在布局的末尾,现在我可以看到Toast
以及Log
。
谢谢大家抽出时间来解决..当时确实棘手的问题..
这里同样的事情,但与RelativeLayout。将ViewView移动到最后,在显示RelativeView的主要内容的View之后解决了问题。并且将ImageView设置为可点击并不是必需的。 – spaaarky21 2013-07-30 17:34:11
或者您可以在设置onClickListener之前使用yourImageView.bringToFront()。 – Houcine 2016-01-21 01:50:14
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();
}
});
我尝试使用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);
我试过这个改变,但似乎没有工作.. – 2011-05-21 18:54:58
看到我的编辑@mahendraliya – Houcine 2011-05-21 19:06:00
我试过使用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;
}
}
希望有所帮助。
普通的内部类已经可以访问'this' - 为它添加一个数据成员是不必要的。 – CommonsWare 2011-05-21 18:56:37
但是内部类中的'this'会不会指向内部类的对象,它将外部类的对象包含在内部?或者你说有一种方法可以通过它在内部类中实际访问外部类的实例? – anargund 2011-05-23 04:00:55
'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_parent
或fill_parent
,这些属性可以覆盖你ImageView
已在您的RelativeLayout
。通过的方式显示,接受的答案不工作我的情况。
其实我只是使用imgView.bringToFront();
它有帮助。
我不知道为什么,但它对我有用!谢谢! – 2016-07-28 10:06:38
同样的事情发生在我身上。
原因是:我使用了带有页边空白的列表视图,因此数据从图像的底部开始,但实际的列表视图在不可见的图像上重叠。所以,即使我们点击图片,操作也不会执行。为了解决这个问题,我使列表视图从图像的下面开始,以便它不与图像本身重叠。
@mahendraliya:不要在这里使用'getApplicationContext()'。使用'WhateverYourActivityIs.this',用您的活动名称替换'WhateverYourActivityIs'。此外,将某些内容记录到LogCat(例如'Log.w()')通常很有用,而不是依赖于Toast来进行这种诊断。 – CommonsWare 2011-05-21 18:35:09
@CommonsWare:从更新中可以看到,我将“getApplicationContext()”更改为“HomeActivity.this”..并添加了一条Log语句..它仍然不起作用..我是否缺少特定于onClickListener的内容使用ImageView? – 2011-05-21 18:53:03
@mahendraliya:“我是否缺少特定于onClickListener与ImageView一起使用的内容?” - 不,它应该工作得很好。 – CommonsWare 2011-05-21 18:57:16