我有一个按钮:
<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
一旦实际接收到按钮单击事件,则每隔一次单击按钮就会工作,直到它变为不可见并再次恢复可见。
我应该做些什么来确保按钮点击事件总是被接收和处理?
发布于 2018-06-13 11:00:12
根本原因是两个xml属性:android:focusable="true"
和android:focusableInTouchMode="true"
,这会导致按钮在其OnClickListener
被触发之前获得焦点,并且每次将按钮View.INVISIBLE
设置为View.VISIBLE
时,它都会失去焦点,因此奇怪的现象再次发生。
有关更多详细信息,请参阅SO question。
发布于 2018-06-15 03:47:20
解决方案实际上是,我隐藏了警报,而我本应忽略它们。
我通过调用alert.hide()让警报在几秒钟后自动消失,但这不会删除它们。因此,当焦点从我的主要活动中消失时,焦点又回到了隐藏的警报上,因此按钮在我的主要活动上不起作用,直到我点击屏幕足够多的次数来消除所有隐藏的警报。
我更改了代码以调用alert.dismiss(),并且我不再有这个问题。
https://stackoverflow.com/questions/50827391
复制相似问题