Android ImageView的onClickListener不起作用

Mah*_*iya 39 android

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

以下是我的导入声明:

import android.view.View.OnClickListener;
Run Code Online (Sandbox Code Playgroud)

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

<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"  />
Run Code Online (Sandbox Code Playgroud)

以下是我的活动中的代码,它定义了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();
            }
        });
Run Code Online (Sandbox Code Playgroud)

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

提前致谢.

Hou*_*ine 41

你可以尝试一下并告诉我会发生什么事吗?:

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();
    }
});
Run Code Online (Sandbox Code Playgroud)

或者你应该添加这个:

imgFavorite.setClickable(true); 
Run Code Online (Sandbox Code Playgroud)

  • 我尝试使用 imgFavorite.setClickable(true); 但这也不能解决问题 (2认同)

Mah*_*iya 25

好,

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

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

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

  • 同样的事情,但有一个RelativeLayout.在显示RelativeView的主要内容的View之后,将ImageView移动到最后,修复了问题.并且将ImageView设置为可点击并不是必需的. (2认同)

小智 7

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


cch*_*son 5

尝试传递上下文而不是应用程序上下文(您还可以添加日志语句来检查该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();
        }
    });
Run Code Online (Sandbox Code Playgroud)


小智 5

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"  />
Run Code Online (Sandbox Code Playgroud)

在您的活动中,您可以创建一个具有相同名称的方法(clickEvent(View 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();
  }
Run Code Online (Sandbox Code Playgroud)


Bon*_*dax 5

好吧,我的解决方案是另一种,或者说,错误是:

我只是在另一个两次封装的 xml 布局中拥有另一个具有相同 id 的 imageview <included />,该布局是在我想要对单击做出反应的那个之前找到的。解决方案:给其中一个提供另一个 id...