我应该是一个无法正常工作的简单任务。我的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
通过上面的代码,应用程序将完全按预期隐藏手机上的软按钮,但应用程序将要求我在应用程序的其余部分响应之前执行触摸事件。我将基于此提出一个新问题。
答案 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());
}
我希望这会有所帮助。