Android ImageView的onClickListener不起作用

时间:2011-05-21 18:31:06

标签: android

我有一个想要实现onClickListener的ImageView。但是当我点击图像时,没有任何反应。事件Logcat没有显示任何错误。

以下是我的导入声明:

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();
            }
        });

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

提前致谢。

15 个答案:

答案 0 :(得分:38)

你试试这个并告诉我会发生什么事吗? :

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); 

答案 1 :(得分:24)

确定,

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

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

谢谢大家花时间解决问题..肯定很棘手..

答案 2 :(得分:5)

实际上我只是使用imgView.bringToFront();而且它有所帮助。

答案 3 :(得分:4)

android:onClick =&#34; clickEvent&#34; 添加到您的图片视图。

<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(View v)),这就是它!您也可以看到日志和Toast文本。

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();
  }

答案 4 :(得分:3)

尝试传递上下文而不是应用程序上下文(您还可以添加日志语句来检查是否运行了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();
        }
    });

答案 5 :(得分:2)

我的解决方案是另一个,或者让我们说,错误是:

我只是在另一个<included />两次封装的xml布局中有另一个具有相同id的imageview,这是在我想对点击做出反应之前找到的。解决方案:给其中一个人另一个身份......

答案 6 :(得分:1)

有同样的问题,感谢Framelayout提示! 我在framelayout中使用了两个重叠的图像(顶部的一个是alpha蒙版,以产生柔和边框的效果)

我在xml android:clickable="true"中设置了我想要启动onClickListener的图像,并将android:clickable="false"设置为alpha蒙版。

答案 7 :(得分:1)

请尝试这个。

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();

        }

    });

答案 8 :(得分:0)

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

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

希望有所帮助。

答案 9 :(得分:0)

我为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());
        }
    }
});

答案 10 :(得分:0)

检查其他视图是否包含属性match_parentfill_parent,这些属性可能会涵盖ImageView中显示的RelativeLayout。顺便提一下,接受的答案在我的情况下不起作用。

答案 11 :(得分:0)

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

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

答案 12 :(得分:0)

此类问题的最可能原因可能是被单击的视图顶部有一些不可见的视图,这阻止了click事件触发。因此,在大力搜索任何内容之前,请重新检查xml布局。

PS:-在我的情况下,recyclerView完全覆盖了版面,因此单击imageView受到限制。

答案 13 :(得分:0)

同一件事与我一起发生。

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

MainActivity.java 打开,但我忘记了“复制的活动”捆绑了一些 params ,如果我没有传递任何 params >,刚结束。

所以我的活动开始但在同一时间结束。

我写了吐司,发现了这个愚蠢的错误。 :P

答案 14 :(得分:0)

作为android开发的初学者,我的问题不是这些解决方案中的任何一个。我遇到了几个问题。

首先,我没有意识到您必须使用错误符号来使用调试器来达到断点。

然后,我在点击监听器中无提示地出现错误,我试图将某些内容传递给方法,但是该方法需要一个float值。

但是在思想上,该方法显示为未使用。直到我强制转换值后,方法才以正确的颜色显示,并且不再标记为未使用。

不确定为什么尝试使用类型错误的方法不会得到错误提示吗?

我还必须在清单中添加android:debuggable="true"才能调试到断点的位置。