首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >imageview上的setOnClickListener需要点击两次才能工作

imageview上的setOnClickListener需要点击两次才能工作
EN

Stack Overflow用户
提问于 2017-07-13 16:04:30
回答 2查看 1.2K关注 0票数 1

我在我的活动中有ImageView,具有以下属性我已经初始化了imageview并在ImageView上设置了OnClickListener,但当我第一次单击Imageview时,onlick事件不起作用,但当我第二次单击Imageview时,它起作用了

代码语言:javascript
复制
                  <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类文件中有以下代码:

代码语言:javascript
复制
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事件

代码语言:javascript
复制
 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,但也没有帮助,请告诉我我可以执行什么操作来解决这个问题。

EN

回答 2

Stack Overflow用户

发布于 2017-07-13 16:12:22

我认为问题出在您的条件,每次单击时都会调用click,请尝试以下代码(show toast on click):

代码语言:javascript
复制
 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);
                    }
            }
        });
票数 0
EN

Stack Overflow用户

发布于 2019-05-09 03:25:14

我把这个答案放在这里,以防有人遇到同样的问题,和我有同样的原因。我的原因是布局中的另一个视图在on touch事件之后仍然保持焦点,因为我在实现on touch侦听器时忘记了将返回值从false更改为true。其结果是,在调用图像视图上的onclick事件之前,我必须在触摸另一个视图之后单击图像视图两次,以便焦点返回到布局。因此,通常要确保布局中没有其他视图保持焦点,可能是在发生触摸事件之后,在这种情况下,其onTouch方法的实现应该返回true,而不是默认的false值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45074852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档