<长期寻求解决办法>Android ViewPager+Fragment页面空白

 沥胆披肝365_781 发布于 2022-10-30 13:53

Adapter

public class AdvViewPagerAdapter extends FragmentPagerAdapter {
    private Context context;
    private List urls;
    private List imgs;
    private List fragments;

    public AdvViewPagerAdapter(FragmentManager fm, Context context, List urls) {
        super(fm);
        this.context = context;
        this.urls = urls;
        // imgs = new ArrayList();
        fragments = new ArrayList();
        for (String url : urls) {
            MyImageFragment fragment = new MyImageFragment(context, url);
            fragments.add(fragment);
        }
    }

    @Override
    public int getCount() {
        return urls.size();
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    @Override
    public Fragment getItem(int position) {
        MLog.i(fragments.get(position));
        return fragments.get(position);
    }
}

Fragment

class MyImageFragment extends BaseFragment {
        private View view;
        private ImageView mImageView;
        private String url;

        public MyImageFragment(Context context, String url) {
            super(context);
            this.url = url;
        }

        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            view = getLayout(inflater, container, R.layout.image_layout, false);
            initView();
            Picasso.with(getContext()).load(url).into(mImageView);
            return view;
        }

        @Override
        public void initView() {
            mImageView = (ImageView) view.findViewById(R.id.image_layout_iv);
        }
    }

R.layout.image_layout

    

        
    

Test代码

    public class WelcomeActivity extends BaseActivity {

    private ViewPager viewpager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);
        initView();
    }

    @Override
    public void initView() {
        viewpager = (ViewPager) findViewById(R.id.viewpager);
        List urls = new ArrayList();
        urls.add("http://hiphotos.baidu.com/baidu/pic/item/4ec2d5628535e5dd3c10363671c6a7efce1b621f.png");
        urls.add("http://hiphotos.baidu.com/baidu/pic/item/a8ec8a13632762d07842064fa6ec08fa503dc6c6.png");
        urls.add("http://fanyi.baidu.com/static/translation/img/footer/app_e8ff780.png");
        viewpager.setAdapter(new AdvViewPagerAdapter(getSupportFragmentManager(), getContext(), urls));
    }
}

!BaseActivity 继承自
android.support.v4.app.FragmentActivity

!BaseFragment 继承自
android.support.v4.app.Fragment

4 个回答
  • fragmentment没复写getItem()所以得不到子每个pager需要加载的fragment。

    2022-10-31 21:15 回答
  • 你的initView()方法在父类BaseFragment中有调用吗?还是单纯的抽象?在fragment中,context最好使用getActivity()来获取,会对Picasso友好一些,即Picasso.with(getActivity()),可以先试一下。

    2022-10-31 21:15 回答
  • Fragment不是不建议有参的构造吗?另外毕加索的用法是,尽量定出长宽,如果不定的话用自动适配,比如:

                Picasso.with(context)
                        .load(url)
                        .placeholder(res_holder)
                        .error(res_holder)
                        .config(Bitmap.Config.RGB_565)
                        .fit()
                        .centerInside()
                        .into(view);

    建议Picasso尽量设置详细点,有助于显示和控制。如果你说的空白,就是说连imageView的背景都没显示的话,还需查看Acitivty里面的代码,看是否是设置有问题。

    2022-10-31 21:15 回答
  • 该问题已关闭_(:3」∠)_

    2022-10-31 21:15 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有