Android OnClickListener在第一次点击时不会触发

时间:2015-02-13 19:35:22

标签: android onclicklistener

我应该是一个无法正常工作的简单任务。我的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

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

请改用此代码:

    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。祝你好运

答案 2 :(得分:0)

解决问题的一种方法是使用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());
}

我希望这会有所帮助。

相关问题