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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_25136209/article/details/72739175

先上效果图
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.

猜你喜欢

转载自blog.csdn.net/sinat_25136209/article/details/72739175