Android ImageView';s onclick侦听器不工作

Android ImageView';s onclick侦听器不工作,android,Android,我有一个ImageView,我想为它实现onClickListener。但是当我点击图片时,什么也没发生。事件日志猫未显示任何错误 以下是我的进口声明: import android.view.View.OnClickListener; 以下是我的图像布局代码: <ImageView android:id="@+id/favorite_icon" android:src="@drawable/small_star" android:layout_width="wrap_

我有一个ImageView,我想为它实现onClickListener。但是当我点击图片时,什么也没发生。事件日志猫未显示任何错误

以下是我的进口声明:

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"  />
我错过了什么吗。任何帮助都将不胜感激


提前感谢。

通过传递上下文而不是应用程序上下文来尝试(您还可以添加日志语句来检查是否曾经运行过
onClick
方法):

imgFavorite.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
Log.d(“==myactivity==”,“调用OnClick”);

Toast.makeText(v.getContext(),//你能试试这个并告诉我发生了什么吗??:

JAVA:

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.setOnClickListener { view ->
    Toast.makeText(this@YourActivityName, R.string.toast_favorite_list_would_appear, Toast.LENGTH_LONG).show()
}
// either you make your imageView clickable programmatically
imgFavorite.clickable = true

// or via xml on your layout file
<ImageView .... android:clickable="true" />
或者您应该添加以下内容:

imgFavorite.setClickable(true); 
KOTLIN:

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.setOnClickListener { view ->
    Toast.makeText(this@YourActivityName, R.string.toast_favorite_list_would_appear, Toast.LENGTH_LONG).show()
}
// either you make your imageView clickable programmatically
imgFavorite.clickable = true

// or via xml on your layout file
<ImageView .... android:clickable="true" />
imgFavorite.setOnClickListener{view->
Toast.makeText(this@YourActivityName,R.string.toast\u favorite\u list\u将出现,toast.LENGTH\u LONG.show()
}
//要么通过编程使imageView可单击
imgFavorite.clickable=true
//或者通过布局文件上的xml

对于要传递活动引用的内部类,我通常在onCreate()中创建活动引用,并将其作为成员。由于内部类可以访问父类的成员,因此您可以获得活动及其上下文:

class MyClass extends Activity{
    private Activity thisActivity;
    @Override
protected void onCreate(Bundle savedInstanceState) {
            thisActivity = this;
    }
}
希望有帮助。

好的

我设法解决了这个棘手的问题。事情就像我在使用
FrameLayout
。我不知道为什么,但我想到可能是图标隐藏在其他视图后面

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


谢谢大家花时间来解决这个问题。。确实很棘手。

也有同样的问题,谢谢你的Framelayout提示! 我在framelayout中使用了两个重叠的图像(顶部的一个是alpha遮罩,以提供软边框的效果)


我在xml
android:clickable=“true”
中设置了我想要启动onClickListener的图像,并且
android:clickable=“false”
到alpha掩码。

我将ImageView的OnClickListener定义为按钮的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());
        }
    }
});

将android: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"  />

我的解决方案是另一个,或者说,bug是:


我只是在另一个
两次封装的xml布局中使用了另一个具有相同id的imageview,该布局在我想要在单击时做出反应的布局之前找到。解决方案:为其中一个视图提供另一个id。

检查其他视图是否具有属性
匹配父视图
填充父视图
,这些属性可能会覆盖您的
>ImageView
已显示在您的
RelativeLayout
中。顺便说一句,接受的答案在我的情况下不起作用。

事实上,我刚刚使用了
imgView.bringToFront();
,它很有帮助。

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

原因是:我使用了带页边空白的列表视图,因此数据从图像底部开始,但实际的列表视图在图像上重叠,不可见。因此,即使我们单击图像,也不会执行该操作。为了解决此问题,我已使列表视图从图像下方开始,使其不重叠在图像本身上。

请尝试此项

ImageView imageview1 = findViewById(R.id.imageView1);
imageview1.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

            Toast.makeText(YourActivity.this, "Here is your Text",Toast.LENGTH_SHORT).show();

        }

    });

这些问题的最可能原因可能是某些不可见视图位于被单击视图的顶部,这会阻止单击事件触发。因此,在联机搜索任何内容之前,请正确地重新检查xml布局


PS:-在我的例子中,一个回收视图完全覆盖了布局,因此点击imageView受到限制。

同样的愚蠢的事情发生在我身上

我只是复制了一个活动并粘贴了。定义在清单中

MainActivity.java打开,但我忘记了复制的活动在捆绑包中获得了一些参数,如果我没有传递任何参数,则刚刚完成

所以我的活动开始了,但同时也结束了


我写了Toast,发现了这个愚蠢的错误。作为android开发的初学者,我的问题不是这些解决方案中的任何一个。我有几个问题

首先,我没有意识到必须使用bug符号才能使用调试器来命中断点

然后我在我的点击侦听器中悄悄地得到一个错误,我试图向一个方法传递一些东西,但是该方法需要一个浮点值

但是在ide中,该方法显示为未使用。直到我转换了值,该方法才以正确的颜色显示,并且不再标记为未使用

不知道为什么我在尝试使用错误类型的方法时没有出错


此外,我还必须将
android:debuggable=“true”
添加到我的清单中,以使调试达到断点。

@mahendraliya:不要使用
getApplicationContext()
此处。使用
WhateYourActivityIs。这是
,在活动的名称中替换
WhateYourActivityIs
。此外,将某些内容记录到LogCat(例如,
log.w()
)也很有用这种诊断不依赖于
Toast
。@Commonware:正如您从更新中看到的,我将“getApplicationContext()”更改为“HomeActivity.this”。。并添加了一个日志语句。它仍然不起作用。我是否缺少onClickListener使用ImageView时所特有的内容?@Mahendralia:“我是否缺少onClickListener使用ImageView时所特有的功能?”--不,它应该可以正常工作。@Commonware:我不明白它为什么不工作。您看到了吗
ImageView imageview1 = findViewById(R.id.imageView1);
imageview1.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

            Toast.makeText(YourActivity.this, "Here is your Text",Toast.LENGTH_SHORT).show();

        }

    });