我在我的活动中有ImageView
,具有以下属性我已经初始化了imageview并在ImageView
上设置了OnClickListener
,但当我第一次单击Imageview时,onlick事件不起作用,但当我第二次单击Imageview时,它起作用了
<ImageView
android:clickable="true"
android:focusable="false"
android:id="@+id/switchIcon"
android:layout_width="50dp"
android:layout_height="45dp"
android:layout_alignParentRight="true"
android:layout_below="@+id/title"
android:layout_weight="0.1"
android:scaleType="fitXY"
android:src="@drawable/ic_play_circle_filled_black_24dp" />
我的activity类文件中有以下代码:
ImageView switchIcon;
switchIcon = (ImageView) findViewById(R.id.switchIcon);
switchIcon.setOnClickListener(new View.OnClickListener() {
@Override
public boolean onClick(View v) {
if (switchStatus.equals("video")) {
switchStatus = "image";
LayoutImage.setVisibility(View.VISIBLE);
LayoutVideo.setVisibility(View.GONE);
mPlayer.pause();
Glide.with(getApplicationContext()).load(R.drawable.ic_play_circle_filled_black_24dp).into(switchIcon);
} else if (switchStatus.equals("image")) {
if (requestData.get("video_link").equals("")) {
Toast.makeText(getApplicationContext(), "No Video Found for this Recipe", Toast.LENGTH_LONG).show();
} else {
switchStatus = "video";
LayoutImage.setVisibility(View.GONE);
LayoutVideo.setVisibility(View.VISIBLE);
mPlayer.play();
Glide.with(getApplicationContext()).load(R.drawable.ic_photo_size_select_actual_black_24dp).into(switchIcon);
}
} else {
switchStatus = "image";
LayoutImage.setVisibility(View.VISIBLE);
LayoutVideo.setVisibility(View.GONE);
mPlayer.pause();
Glide.with(getApplicationContext()).load(R.drawable.ic_play_circle_filled_black_24dp).into(switchIcon);
}
}
});
我也尝试添加OnTouchListener()
,因为OnClickListener()
不能处理这个问题,但OnTouchListener()
也不能处理ImageView它也需要两次单击才能获得onclick事件
switchIcon.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP){
if (switchStatus.equals("video")) {
switchStatus = "image";
LayoutImage.setVisibility(View.VISIBLE);
LayoutVideo.setVisibility(View.GONE);
mPlayer.pause();
Glide.with(getApplicationContext()).load(R.drawable.ic_play_circle_filled_black_24dp).into(switchIcon);
} else if (switchStatus.equals("image")) {
if (requestData.get("video_link").equals("")) {
Toast.makeText(getApplicationContext(), "No Video Found for this Recipe", Toast.LENGTH_LONG).show();
} else {
switchStatus = "video";
LayoutImage.setVisibility(View.GONE);
LayoutVideo.setVisibility(View.VISIBLE);
mPlayer.play();
Glide.with(getApplicationContext()).load(R.drawable.ic_photo_size_select_actual_black_24dp).into(switchIcon);
}
} else {
switchStatus = "image";
LayoutImage.setVisibility(View.VISIBLE);
LayoutVideo.setVisibility(View.GONE);
mPlayer.pause();
Glide.with(getApplicationContext()).load(R.drawable.ic_play_circle_filled_black_24dp).into(switchIcon);
}
return true;
}
return false;
}
});
我也尝试过将ImageView
更改为ImageButton
,但也没有帮助,请告诉我我可以执行什么操作来解决这个问题。
发布于 2017-07-13 16:12:22
我认为问题出在您的条件,每次单击时都会调用click,请尝试以下代码(show toast on click):
switchIcon.setOnClickListener(new View.OnClickListener() {
@Override
public boolean onClick(View v) {
if (switchStatus.equals("video")) {
Toast.makeText(getApplicationContext(), "switchStatus changed to video", Toast.LENGTH_LONG).show();
switchStatus = "image";
LayoutImage.setVisibility(View.VISIBLE);
LayoutVideo.setVisibility(View.GONE);
mPlayer.pause();
Glide.with(getApplicationContext()).load(R.drawable.ic_play_circle_filled_black_24dp).into(switchIcon);
} else if (switchStatus.equals("image")) {
Toast.makeText(getApplicationContext(), "switchStatus image has clicked", Toast.LENGTH_LONG).show();
if (requestData.get("video_link").equals("")) {
Toast.makeText(getApplicationContext(), "No Video Found for this Recipe", Toast.LENGTH_LONG).show();
} else {
switchStatus = "video";
LayoutImage.setVisibility(View.GONE);
LayoutVideo.setVisibility(View.VISIBLE);
mPlayer.play();
Glide.with(getApplicationContext()).load(R.drawable.ic_photo_size_select_actual_black_24dp).into(switchIcon);
}
} else {
Toast.makeText(getApplicationContext(), "switchStatus was blank, changed to image.", Toast.LENGTH_LONG).show();
switchStatus = "image";
LayoutImage.setVisibility(View.VISIBLE);
LayoutVideo.setVisibility(View.GONE);
mPlayer.pause();
Glide.with(getApplicationContext()).load(R.drawable.ic_play_circle_filled_black_24dp).into(switchIcon);
}
}
});
发布于 2019-05-09 03:25:14
我把这个答案放在这里,以防有人遇到同样的问题,和我有同样的原因。我的原因是布局中的另一个视图在on touch事件之后仍然保持焦点,因为我在实现on touch侦听器时忘记了将返回值从false更改为true。其结果是,在调用图像视图上的onclick事件之前,我必须在触摸另一个视图之后单击图像视图两次,以便焦点返回到布局。因此,通常要确保布局中没有其他视图保持焦点,可能是在发生触摸事件之后,在这种情况下,其onTouch方法的实现应该返回true,而不是默认的false值。
https://stackoverflow.com/questions/45074852
复制相似问题