viewpager图片广告条点击转跳fragment-----【轮播图点击转跳详情界面】

来源:互联网 发布:php curl 模拟cookie 编辑:程序博客网 时间:2024/05/16 18:54

先上效果图
viewpager点击图片转跳

例子就是最简单,就是入门的viewpager的轮播,想学习的同学也可以下载我的项目,下载地址在这
github.,里面有很详细的讲解,在自动轮播的时候加入和handler使其能够自动滚动,下面是能让viewpager能够自动滚动的代码,很简单就是获取当前的界面然后让当前的界面+1,然后发送一个空消息

 android.os.Handler  h=new android.os.Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            int item = viewPager.getCurrentItem() + 1;            viewPager.setCurrentItem(item);//这个先写,int item后写            h.sendEmptyMessageDelayed(0, 4000);        }    };




记得还要在oncreat方法里面再次发送一个消息
h.sendEmptyMessageDelayed(0, 4000);

然后一般做新闻客户端的详情页面的跳转都是序列化对象,然后进行Activity级别的跳转。我当时就想fragment这么好用,为啥不能用fragment啊?想了好久就果断想用点击图片转跳至fragment。这样还不用序列化对象。多方便啊,但是网上找了很久没有这方面的例子,然后下面这些代码是写在viewpager适配器中 instantiateItem这个方法中的。注意是在设置了图片数据之后才进行下面的代码。

这里讲讲以前遇到的一个bug,因为fragment是依托Activity才能存在的。所以我没有设置if(isclick)这个方法之前,只要是点击了图片然后转跳了fragment之后,在fragment上面点击几下,然后想返回原来带有viewpager的那个界面也需要点击同样的次数才能返回原来的界面。因为在fragment的下面就是Activity。虽然点击的是fragment,但是实际上点击的是fragment。

然后解决这个bug是设置了一个boolean类型的值,最开始设置为true,然后点了及fragment之后就改为false,这样在点进fragment之后就不能再点击了。然后重点来了

重点是,设置了另一个handler2,这里发空消息,空消息发的是让boolean类型为true,然后把消息发在转跳fragment中的语句中。这个办法虽然还是有缺陷,试验过在点击fragment界面很多次之后还是能返回原来的Activity界面的!!!

以下是转跳的代码

           imageView.setTag(imageaaa[realPosition]);///得到位置,某个图片的位置            imageView.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    switch ((int) v.getTag()) {                        case R.drawable.a:                            if (isclick) {                                h.removeCallbacksAndMessages(null);                                getSupportFragmentManager().                                        beginTransaction().                                        //如果不加下面这个语句是直接退出的!!!!                                        addToBackStack(null).                                        replace(R.id.aaa, new newfragment()).                                        commit();                                isclick=false;                                Log.e("第一次的情况"," "+isclick);                                h2.sendEmptyMessageDelayed(0,4000);                            }                            Log.e("发了消息之后情况"," "+isclick);                            break;                        case R.drawable.b:                            if (isclick) {                                Log.e("第二个fragment开始", isclick + " ");                                getSupportFragmentManager().                                        beginTransaction().                                        addToBackStack(null).                                        replace(R.id.aaa, new newfragment1()).                                        commit();                                isclick=false;                            }                            Log.e("第二个fragment结束", isclick + " ");                            break;                        case R.drawable.c:                            if (isclick) {                            getSupportFragmentManager().                                    beginTransaction().                                    addToBackStack(null).                                    replace(R.id.aaa, new newfragment2()).                                    commit();                                isclick=false;                            }                            break;                        case R.drawable.d:                            if (isclick) {                            getSupportFragmentManager().                                    beginTransaction().                                    addToBackStack(null).                                    replace(R.id.aaa, new newfragment3()).                                    commit();                            isclick=false;                       }                            break;                    }                }            });

详细的viewpager的轮播在我的代码中都有,还望大家多多指教
下载地址 github.

阅读全文
0 0
原创粉丝点击