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();
}
});
Я что-то упускаю. Любая помощь будет оценена.
Спасибо заранее.
Ответы
Ответ 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, поэтому данные начинаются с нижней части изображения, но фактическое представление списка перекрывается на изображении, которое не отображается. Поэтому, даже если мы нажимаем на изображение, действие не выполняется. Чтобы исправить это, я сделал начало списка с изображения ниже, чтобы оно не перекрывалось на самом изображении.