为ViewFlipper添加点击事件,很简单

在使用ViewFlipper的时候,其实没必要给每个子view都添加点击事件,查看方法ViewFlipper.getDisplayedChild()得知,该方法能获取当前展示的view的索引值,返回int类型。很显然,如果能获取到这个值,就能折中实现了每个子view的点击监听的功能。

 mViewFlipper.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Logger.t(TAG).i(mViewFlipper.getDisplayedChild() + "");
            }
        });
为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。


可以通过给ViewFlipper设置点击事件,并在点击事件中禁止ViewPager的滑动来实现。 首先,在ViewPager的onCreate方法中获取ViewPager的触摸事件,然后在ViewFlipper的点击事件中禁止ViewPager的触摸事件。 示例代码如下: ``` ViewPager viewPager = findViewById(R.id.view_pager); ViewFlipper viewFlipper = findViewById(R.id.view_flipper); // 获取ViewPager的触摸事件 viewPager.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return true; } }); // 给ViewFlipper设置点击事件 viewFlipper.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 禁止ViewPager的滑动 viewPager.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return true; } }); } }); ``` 当ViewFlipper被点击时,ViewPager将无法左右滑动。需要注意的是,当用户离开ViewFlipper后,需要重新启用ViewPager的触摸事件。可以在ViewPager的onTouchEvent方法中判断是否禁用了触摸事件,如果禁用了就重新启用。 示例代码如下: ``` viewPager.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // 判断是否禁用了触摸事件 if (event.getAction() == MotionEvent.ACTION_UP && viewPager.onTouchEvent(event)) { // 重新启用触摸事件 viewPager.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return false; } }); return true; } return false; } }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值