首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >设置为View.VISIBLE后,安卓按钮需要点击几次才能正常工作

设置为View.VISIBLE后,安卓按钮需要点击几次才能正常工作
EN

Stack Overflow用户
提问于 2018-06-13 07:58:01
回答 2查看 206关注 0票数 1

我有一个按钮:

<Button
    android:id="@+id/my_btn"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:text="My Button"
    android:textColor="@android:color/black"
    android:textSize="20sp"
    android:textStyle="bold" />

在我的活动中,我设置了一个onclicklistener:

findViewById(R.id.my_btn).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        handleButtonClick();
    }
});

在代码中的某些地方,我将按钮的可见性设置为View.INVSISBLE,然后又将其设置为View.VISIBLE。当它从不可见变为可见时,我尝试单击它,有时需要多次单击才能使onclicklistener真正接收到事件。同时,每当我点击它但没有任何反应时,logcat每次都会记录:

D/ViewRootImpl@1b16f49[MainActivity]: ViewPostImeInputStage processPointer 0
D/ViewRootImpl@1b16f49[MainActivity]: mHardwareRenderer.destroy()#4
D/ViewRootImpl@1b16f49[MainActivity]: dispatchDetachedFromWindow
W/InputEventReceiver: Attempted to finish an input event but the input event 
receiver has already been disposed.
D/InputTransport: Input channel destroyed: fd=71

一旦实际接收到按钮单击事件,则每隔一次单击按钮就会工作,直到它变为不可见并再次恢复可见。

我应该做些什么来确保按钮点击事件总是被接收和处理?

EN

回答 2

Stack Overflow用户

发布于 2018-06-13 11:00:12

根本原因是两个xml属性:android:focusable="true"android:focusableInTouchMode="true",这会导致按钮在其OnClickListener被触发之前获得焦点,并且每次将按钮View.INVISIBLE设置为View.VISIBLE时,它都会失去焦点,因此奇怪的现象再次发生。

有关更多详细信息,请参阅SO question

票数 2
EN

Stack Overflow用户

发布于 2018-06-15 03:47:20

解决方案实际上是,我隐藏了警报,而我本应忽略它们。

我通过调用alert.hide()让警报在几秒钟后自动消失,但这不会删除它们。因此,当焦点从我的主要活动中消失时,焦点又回到了隐藏的警报上,因此按钮在我的主要活动上不起作用,直到我点击屏幕足够多的次数来消除所有隐藏的警报。

我更改了代码以调用alert.dismiss(),并且我不再有这个问题。

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

https://stackoverflow.com/questions/50827391

复制
相关文章

相似问题

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