[英]Why my onClickListener should double click?
我将onClickListener添加到了我通过extension LinearLayout编写的NavLinearLayout中,每次双击时内部的功能都可以使用。但是该功能意味着仅单击一次即可使用。为什么? 这是我的NavLinearLayout
public class NavLinearLayout extends LinearLayout{
public NavLinearLayout(Context context)
{
super(context);
}
public NavLinearLayout(Context context, AttributeSet attrs)
{
super(context, attrs);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev)
{
// do whatever you want with the event
// and return true so that children don't receive it
return true;
}}
这是MainActivity代码:
boutiqueLL.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View arg0)
{
setFlagTrue(Navigation.Boutique.getPosition());
setBtnLine();
}
});private void setFlagTrue(int position) {
sousuoFlag = position == 4 ? true : false;
dingyueFlag = position == 3 ? true : false;
fenleiFlag = position == 2 ? true : false;
boutiqueFlag = position == 1 ? true : false;
}private void setBtnLine() {
Log.d("test",(boutiqueFlag?"true":"false")+" : "
+(fenleiFlag?"true":"false")+" : "
+(dingyueFlag?"true":"false")+" : "
+(sousuoFlag?"true":"false"));
if (sousuoFlag) {
sousuoLine.setBackgroundColor(Color.RED);
ft = fm.beginTransaction();
ft.replace(R.id.main_page, new SearchFragment(mdb));
ft.addToBackStack(null);
ft.commit();
} else {
sousuoLine.setBackgroundColor(Color.argb(0, 0, 0, 0));
}
if (dingyueFlag) {
dingyueLine.setBackgroundColor(Color.RED);
ft = fm.beginTransaction();
ft.replace(R.id.main_page, new SubscribeFragment(mdb));
ft.addToBackStack(null);
ft.commit();
} else {
dingyueLine.setBackgroundColor(Color.argb(0, 0, 0, 0));
}
if (fenleiFlag) {
fenleiLine.setBackgroundColor(Color.RED);
ft = fm.beginTransaction();
ft.replace(R.id.main_page, new FenLeiFragment(hanlder,mdb));
ft.addToBackStack(null);
ft.commit();
} else {
fenleiLine.setBackgroundColor(Color.argb(0, 0, 0, 0));
}
if (boutiqueFlag) {
boutiqueLine.setBackgroundColor(Color.RED);
ft = fm.beginTransaction();
ft.replace(R.id.main_page, new BoutFragmentNew(mdb));
ft.commit();
} else {
boutiqueLine.setBackgroundColor(Color.argb(0, 0, 0, 0));
}
}
对于您的问题,这可能是一个解释:
如我所见,您扩展了LinearLayout,它提供了InterceptTouchEvents(),可用于触摸事件。
因此,在此布局上,您将拥有一个touchevent侦听器和一个clickevent侦听器,在这种情况下,当您确实单击布局时,将首先调用touch事件,然后再次调用click事件。
这就是为什么您的touchevent有效的原因。
我使用OnTouchListener代替OnClickListener。它可以工作,但是我不知道为什么我的OnClickListener现在需要双击。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.