童第森 2022-07-06 12:33 采纳率: 40%
浏览 100
已结题

ViewPager实现的广告轮播加载不出来

Android 首页ViewPager实现的广告轮播加载不出来

img

原本是这样的

img

public class HomeActivity extends AppCompatActivity implements MyViewPager.OnViewPagerTouchListener
        , ViewPager.OnPageChangeListener {
    //    1.点击底部tab进行上面空白区域的Fragment的切换实现
//    2.点击底部tab实现tab颜色变化的实现(选中项为蓝色,其他项为灰色)

    private ViewPager viewPager;
    View view;


    private MyViewPager mLoopPager;
    private LoopPagerAdapter mLoopPagerAdapter;
    private static List<Integer> sPics = new ArrayList<>();

    private Handler mHandler;
    private Boolean mFlag = false;

    static {
        sPics.add(R.drawable.pic1);
        sPics.add(R.drawable.pic2);
        sPics.add(R.drawable.pic3);
        sPics.add(R.drawable.pic4);
        sPics.add(R.drawable.pic5);
    }


    ImageView mImageView1, mImageView2, mImageView3, mImageView4;
    int len = 4;
    ImageView[] imageViews = new ImageView[len];
    FragmentManager fm = getSupportFragmentManager();


    private LinearLayout pointContainer;


    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_home);


        mImageView1 = findViewById(R.id.iv1);
        mImageView2 = findViewById(R.id.iv2);
        mImageView3 = findViewById(R.id.iv3);
        mImageView4 = findViewById(R.id.iv4);

        imageViews[0] = mImageView1;
        imageViews[1] = mImageView2;
        imageViews[2] = mImageView3;
        imageViews[3] = mImageView4;

        for (int i = 0; i < imageViews.length; i++) {
            final int j = i;
            imageViews[i].setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    showTab(j);
                }
            });
        }
//        默认第一项处于被选中状态

//        hiedFragment(createFragment(0));
//        hiedFragment(createFragment(1));
//        hiedFragment(createFragment(2));
//        hiedFragment(createFragment(3));
//        showFragment(createFragment(0));
        showTab(0);


        initView();
        mHandler = new Handler();

    }

    @Override
    public void onAttachedToWindow() {
        super.onAttachedToWindow();
        mHandler.post(mLoopTask);

    }

    @Override
    public void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        mHandler.removeCallbacks(mLoopTask);
    }

    private Runnable mLoopTask = new Runnable() {
        @Override
        public void run() {
            if (!mFlag) {
                int currentItem = mLoopPager.getCurrentItem();
                mLoopPager.setCurrentItem(++currentItem, true);

            }
            mHandler.postDelayed(this, 3000);

        }
    };

    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
    private void initView() {

        view = getLayoutInflater().inflate(R.layout.fragment_home, null);
        mLoopPager = (MyViewPager) view.findViewById(R.id.loop);

        if (mLoopPager == null) {
            Log.e("main", "1 should not be null");
        }
        //设置适配器
        mLoopPagerAdapter = new LoopPagerAdapter();

        mLoopPagerAdapter.setData(sPics);
        if (mLoopPagerAdapter == null) {
            Log.e("main", "2 should not be null");
        }
        mLoopPager.setAdapter(mLoopPagerAdapter);

        mLoopPager.setOnViewPagerListener(this);
        mLoopPager.addOnPageChangeListener((ViewPager.OnPageChangeListener) this);
        //根据图片的个数去添加点的个数
        View view2 = /*getLayoutInflater().*/View.inflate(this, R.layout.fragment_home, null);
        pointContainer = (LinearLayout) view2.findViewById(R.id.points);

        //pointContainer = (LinearLayout) this.findViewById(R.id.points);
        InsertPoint();

        mLoopPager.setCurrentItem(100 * sPics.size() - 1, false);
    }

    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
    private void InsertPoint() {
        for (int i = 0; i < sPics.size(); i++) {
            View point = new View(this);
            LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(40, 40);
            layoutParams.leftMargin = 20;
            point.setBackground(getResources().getDrawable(R.drawable.normal_point));
            point.setLayoutParams(layoutParams);

            if (pointContainer == null) {

                Log.e("main", "p should not be null");

            }
            pointContainer.addView(point);


        }
    }

    @Override
    public void onPagerTouch(Boolean isTouch) {
        mFlag = isTouch;
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
        //viewPager停下来时的点位置
        int realPos;
        if (mLoopPagerAdapter.getDataRealSize() != 0) {
            realPos = position % mLoopPagerAdapter.getDataRealSize();
        } else {
            realPos = 0;
        }
        setSelectPoint(realPos);

    }

    private void setSelectPoint(int realPos) {
        for (int i = 0; i < pointContainer.getChildCount(); i++) {
            View point = pointContainer.getChildAt(i);
            if (i != realPos) {
                point.setBackgroundResource(R.drawable.normal_point);
            } else {
                point.setBackgroundResource(R.drawable.select_point);
            }
        }
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }


    //    1.点击底部tab进行上面空白区域的Fragment的切换实现
//               1.创建Fragment,对Fragment进行标记,以便后面进行复用
//                         1.创建Fragment之前要考虑一点的是,是复用还是创建
//               2.当从当前Fragment再次切换回原来的Fragment的时候,又或者是新的Fragment
//                    对原来的Fragment进行复用显示,对其余的Fragment进行隐藏
//                    对新的Fragment进行显示,对其余的Fragment进行隐藏
    //    2.点击底部tab实现tab颜色变化的实现(选中项为蓝色,其他项为灰色)
    private void showTab(int index) {
        Fragment fragment = fm.findFragmentByTag("tag" + index);
        Log.e("showTab--fragment---", "tag:" + "tag" + index + fragment);
        //    创建Fragment
//        isAdded:如果改fragment添加到Activity中,则返回为true
        if (null == fragment || !fragment.isAdded()) {
//            如果点击对应的Fragment未创建则创建,反之则复用
            fragment = createFragment(index);
        }
//        将除去当前的其他Fragment进行隐藏处理
        hideFragment(fragment);
//        对当前的Fragment进行显示处理
        showFragment(fragment);

        changeTabColor(index);


    }

    private void showFragment(Fragment fragment) {
        Log.e("showFragment-fment-", "" + fragment);
        FragmentTransaction ft = fm.beginTransaction();
        ft.show(fragment);
        ft.commitAllowingStateLoss();
        //Fragment对用户可见
        fragment.setUserVisibleHint(true);

    }

    private void hideFragment(Fragment fragment) {
        for (int i = 0; i < imageViews.length; i++) {
            Fragment fment = null;
            FragmentTransaction ft = fm.beginTransaction();
            fment = fm.findFragmentByTag("tag" + i);
            Log.e("hiedFragment-fment-", "" + fment);
//            隐藏的条件:
//                1.Fragment存在
//                2.不是当前的Fragment
            if (fment != null && fment.isAdded() && fment != fragment) {
                ft.hide(fment);
                ft.commitAllowingStateLoss();
//                Fragment对用户不可见
                fment.setUserVisibleHint(false);
            }

        }
    }


    //    创建Fragment
    private Fragment createFragment(int index) {
        fm = getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        Fragment fragment = null;
        switch (index) {
            case 0:
                fragment = new HomeFragment();
                break;
            case 1:
                fragment = new FindFragment();
                break;
            case 2:
                fragment = new CartFragment();
                break;
            case 3:
                fragment = new MineFragment();
                break;
        }
        ft.add(R.id.lin, fragment, "tag" + index);
        ft.commitAllowingStateLoss();
        Log.e("create-fragment-", "tag:" + "tag" + index + fragment);
        return fragment;

    }

    //    2.点击底部tab实现tab颜色变化的实现(选中项为蓝色,其他项为灰色)
    private void changeTabColor(int index) {
        for (int i = 0; i < imageViews.length; i++) {
//            那当前tab的下标和所有的tab下标进行匹配判断,如果匹配上则是选中项,如果没有匹配上则是未选中项
            if (index == i) {
                imageViews[i].setBackgroundColor(getResources().getColor(R.color.yellow));
            } else {
                imageViews[i].setBackgroundColor(getResources().getColor(R.color.white));
            }
        }

    }

}
  • 写回答

5条回答 默认 最新

  • 虾米~ 2022-07-06 17:11
    关注

    要看你LoopPagerAdapter这个类了

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月7日
  • 赞助了问题酬金5元 7月6日
  • 创建了问题 7月6日

悬赏问题

  • ¥15 对于知识的学以致用的解释
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败