产品开发的流程,seo关键词,网站公司深圳,嵌入式系统开发与click事件冲突
问题描述
维护老代码#xff0c;有一个需求#xff0c;一个组件使用ViewFlipper开发#xff0c;既能左右滑动#xff0c;也可以点击内部的子view#xff0c;这里需要区分click事件月fling事件#xff0c;在click的时候做某些业务。
问题分析
父view点…与click事件冲突
问题描述
维护老代码有一个需求一个组件使用ViewFlipper开发既能左右滑动也可以点击内部的子view这里需要区分click事件月fling事件在click的时候做某些业务。
问题分析
父view点击回调里判断子view并分发给子view
问题解决
在使用ViewFlipper的时候其实没必要给每个子view都添加点击事件查看方法ViewFlipper.getDisplayedChild()得知该方法能获取当前展示的view的索引值返回int类型。很显然如果能获取到这个值就能折中实现了每个子view的点击监听的功能。
mViewFlipper.setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View v) {Logger.t(TAG).i(mViewFlipper.getDisplayedChild() );}});ViewFlipper与Activity生命周期
问题描述
ViewFlipper添加子view需要注意添加的时机 一般的做法都是在代码中动态给ViewFlipper添加子view for (int i 0; i 3; i) {ImageView imageView new ImageView(this);imageView.setScaleType(ImageView.ScaleType.FIT_XY);ImageLoader.getInstance().displayImage(urls.get(i), imageView, AppApplication.mOptions);mViewFlipper.addView(imageView);}问题分析
比如说这里添加了3个子View这里就有一个问题了如果这段代码是在onResume()中调用了的那么如果这个Activity或者Fragment进入onPause()生命周期之后再重新进入onResume()回调这时候会再次调用这段代码继续为ViewFlipper添加子view这时候就会有6个子view存在。那么上面所述的监听回调中返回的数值可能会影响到每个子view监听功能的实现。当然你可以利用取余的方法去进行返回的数值转换但尽量不要这么做。
问题解决
为了避免这种情况的发生要清楚Activity和Fragment的生命周期要避免在onResume()或者onStart()方法中进行添加。或者在onPause()方法中调用removeAllViews()方法先移除掉所有的子view。