Подтвердить что ты не робот

Android ImageView onClickListener не работает

У меня есть ImageView, для которого я хотел реализовать onClickListener. Но когда я нажимаю на изображение, ничего не происходит. Событие Logcat не показывает никаких ошибок.

Ниже приводится моя инструкция 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();
            }
        });

Я что-то упускаю. Любая помощь будет оценена.

Спасибо заранее.

4b9b3361

Ответ 1

Хорошо,

Мне удалось решить эту сложную проблему. Дело в том, что я использовал FrameLayout. Не знаю, почему, но мне казалось, что иконка будет скрыта за каким-то другим видом.

Я попытался поместить значок в конец моего макета, и теперь я могу видеть Toast, а также Log.

Спасибо всем за то, что нашли время, чтобы решить проблему. Было неудобно..

Ответ 2

Вы можете попробовать это и рассказать мне, что происходит?:

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

Ответ 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();
        }
    });

Ответ 4

Добавьте 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"  />

В вашей деятельности вы можете создать метод с тем же именем (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();
  }

Ответ 5

Ну, мое решение было другим, или, допустим, ошибка была:

У меня просто было другое изображение с одним и тем же идентификатором в другом макете <included /> double-encapsuled xml, который был найден до того, который я хотел отреагировать на клик. Решение. Дайте одному из них другой идентификатор...

Ответ 6

Была та же проблема, спасибо за подсказку Framelayout! Я использовал два наложенных изображения в режиме frameelayout (тот, что сверху был альфа-маской, чтобы дать эффект мягких границ)

Я установил в xml android:clickable="true" для изображения, которое я хотел запустить onClickListener, и android:clickable="false" для альфа-маски.

Ответ 7

На самом деле я просто использовал imgView.bringToFront();, и это помогло.

Ответ 8

Для внутренних классов, чтобы передать ссылку на активность, я обычно создаю ссылку на активность в onCreate() и делаю ее членом. Поскольку внутренние классы имеют доступ к членам родительского класса, вы можете овладеть своей деятельностью и, следовательно, ее контекстом:

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

Надеюсь, что это поможет.

Ответ 9

Я определил 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());
        }
    }
});

Ответ 10

Проверьте, имеет ли другое представление свойство match_parent или fill_parent, эти свойства могут охватывать ваш ImageView, который был указан в вашем RelativeLayout. Так, принятый ответ не работает в моем случае.

Ответ 11

То же самое происходит для меня.

Причина в том, что я использовал представление списка с краем Top, поэтому данные начинаются с нижней части изображения, но фактическое представление списка перекрывается на изображении, которое не отображается. Поэтому, даже если мы нажимаем на изображение, действие не выполняется. Чтобы исправить это, я сделал начало списка с изображения ниже, чтобы оно не перекрывалось на самом изображении.