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 方法没有在第一次点击时触发。它从第二次点击开始工作。这是一个带有点击监听器的非常简单的按钮,所以我不确定为什么第一次点击没有被注册。
edit:我发现不仅按钮在第一次点击屏幕之前不起作用,而且我的 viewpager 的选项卡在第一次点击屏幕之前也不会滚动或被选中。因此,这意味着从一开始到首先触摸屏幕之前,应用程序上目前没有可能的手势或按钮按下。是什么把所有东西都锁在外面了?
edit2:我的问题的根源是我设置了以下内容:
getWindow().requestFeature(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
上述代码的目的是删除某些 phone 上的导航按钮,例如 Nexus phone 上的导航按钮。阅读更多:https://developer.android.com/training/system-ui/navigation.html
包含上述代码后,应用程序将完全按照预期隐藏 phone 上的软按钮,但应用程序将要求我在应用程序的其余部分变得响应之前执行触摸事件。我打算以此为基础出一道新题。
请改用此代码:
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());
}
});
}
注意 findViewById 是在 rootView 对象上调用的。祝你好运
解决该问题的一种方法是使用 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"
/>
然后,在 activity:
中定义方法
public void onButtonClick(View view) {
System.out.println(view.getTag().toString());
}
希望对您有所帮助。
虽然是个老问题,但我也遇到过。
主要问题是 focusableInTouchMode
属性。当它设置为 true 时,点击不会在第一次点击时触发,因为 element 元素获得了焦点。
我有一个应该是简单的任务但没有正常工作。我在 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 方法没有在第一次点击时触发。它从第二次点击开始工作。这是一个带有点击监听器的非常简单的按钮,所以我不确定为什么第一次点击没有被注册。
edit:我发现不仅按钮在第一次点击屏幕之前不起作用,而且我的 viewpager 的选项卡在第一次点击屏幕之前也不会滚动或被选中。因此,这意味着从一开始到首先触摸屏幕之前,应用程序上目前没有可能的手势或按钮按下。是什么把所有东西都锁在外面了?
edit2:我的问题的根源是我设置了以下内容:
getWindow().requestFeature(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
上述代码的目的是删除某些 phone 上的导航按钮,例如 Nexus phone 上的导航按钮。阅读更多:https://developer.android.com/training/system-ui/navigation.html
包含上述代码后,应用程序将完全按照预期隐藏 phone 上的软按钮,但应用程序将要求我在应用程序的其余部分变得响应之前执行触摸事件。我打算以此为基础出一道新题。
请改用此代码:
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());
}
});
}
注意 findViewById 是在 rootView 对象上调用的。祝你好运
解决该问题的一种方法是使用 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"
/>
然后,在 activity:
中定义方法public void onButtonClick(View view) {
System.out.println(view.getTag().toString());
}
希望对您有所帮助。
虽然是个老问题,但我也遇到过。
主要问题是 focusableInTouchMode
属性。当它设置为 true 时,点击不会在第一次点击时触发,因为 element 元素获得了焦点。