繁体   English   中英

Android OnClickListener不会在首次点击时触发

[英]Android OnClickListener not firing on first click

我有一个应该无法正常工作的简单任务。 我在xml中定义了一个按钮,如下所示:

<Button
    android:id="@+id/link1"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:layout_marginBottom="5dp"
    android:minWidth="256dip"
    android:minHeight="0dp"
    android:text="Button1"
    android:textSize="15sp"
    android:tag="1"
/>

此按钮连接到片段中的以下侦听器:

final Button link1 = (Button)getActivity().findViewById(R.id.link1);
link1.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
                System.out.println(link1.getTag().toString());
            }
});

我遇到的问题是此onClick方法未在首次点击时触发。 从第二次点击开始。 这是一个带有单击侦听器的非常简单的按钮,因此我不确定为什么未注册第一次单击。

编辑:我发现,不仅在第一次单击屏幕之前按钮不起作用,而且在首次单击屏幕之前,viewpager的选项卡没有滚动或未被选择。 因此,这意味着从一开始直到首次触摸屏幕之前,在应用程序上目前无法进行任何手势或按钮按下操作。 有什么可以像这样把所有东西都锁起来?

edit2:我的问题的根源是我设置了以下内容:

getWindow().requestFeature(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

上面代码的目的是删除某些手机(例如Nexus手机)上的导航按钮。 了解更多: https//developer.android.com/training/system-ui/navigation.html

使用上面的代码,该应用程序将完全按预期隐藏手机上的软按钮,但是该应用程序将要求我在其余应用程序做出响应之前执行触摸事件。 我将基于此提出一个新问题。

虽然这是一个老问题,但我也经历过。 主要问题是focusableInTouchMode属性。 设为true时,点击不会触发第一次点击,因为element元素获得了焦点。

请改用以下代码:

    private View rootView;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    rootView = inflater.inflate(R.layout.fragment_contatos, container, false);
    final Button link1 = (Button)rootView.findViewById(R.id.link1);
link1.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){
                System.out.println(link1.getTag().toString());
            }
});


    }

注意,在rootView对象上调用findViewById。 祝好运

解决问题的一种方法是使用android:onClick属性为XML布局中的按钮分配一个方法。

<Button
    android:id="@+id/link1"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:layout_marginBottom="5dp"
    android:minWidth="256dip"
    android:minHeight="0dp"
    android:text="Button1"
    android:textSize="15sp"
    android:tag="1"
    android:onClick="onButtonClick"
/>

然后,在您的活动中定义方法:

public void onButtonClick(View view) {
    System.out.println(view.getTag().toString());
}

我希望这有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM