简单viewPager优化

本文介绍了一种优化ViewPager的方法,以解决在显示大量图片时可能引发的崩溃问题。通过将每个页面封装为Fragment并放入列表中,原本的方案可能导致内存消耗过大。为了解决这个问题,文章提供了一个适配器的代码示例,简化了处理过程,确保了界面的高效展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


现在项目中遇到有帮助中心展示一个app的使用方法,由于要用到的页面很多,所以不可能每个都去写一个专门处理的东西,比较麻烦,现在就是想要将处理左右侧滑viewPager简单点的东西,比如说我这边的只是单纯的展示图片而已,那么这边就是最好抽象出一个东西出来然后别的具体的页面直接使用就完了那种。

最早的想法是将每个fragment放进一个list中去,但是这样的话图片过多一点会引起崩溃的。那么问题就来了 该怎么办呢?答案就是在将各个页面变成一个fragment之后加入到一个list中去,这样会很耗内存哒。然后崩溃就是肯定的啦

那么,该怎么办呢

其实我最初的想法就是将图片资源的ID放进去然后就不管了,但是不知道为啥鬼使神差的就写成了上面那个版本 

具体代码如下:适配器

/**
 * Created by cc on 2016/11/14.
 *
 */

public class MyNewPagerViewAdapter extends FragmentStatePagerAdapter{

    private ArrayList<Integer> resource;

    public MyNewPagerViewAdapter(FragmentManager fm, ArrayList<Integer> resource) {
        super(fm);
        this.resource = resource;
    }

    @Override
    public Fragment getItem(int position) {
        return ArrayListFragment.newInstance(resource.get(position));
    }

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

fragment


/**
 * Created by Administrator on 2016/11/14.
 *
 */

public class ArrayListFragment extends Fragment {

    private int id;

    public static ArrayListFragment newInstance(int resource) {

        ArrayListFragment fragment = new ArrayListFragment();
        Bundle args = new Bundle();
        args.putInt("id",resource);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        id = getArguments().getInt("id");
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        LinearLayout.LayoutParams viewParams;

        View view= new View(getActivity().getBaseContext());
        viewParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
        view.setLayoutParams(viewParams);

        view.setBackgroundResource(id);
        return view;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }
}

将即将要使用到的页面或者类抽象出来

/**
 * Created by cc on 2016/11/14.
 *
 */

public abstract class Help extends Fragment {

    public ArrayList<Integer> list = new ArrayList<>();

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.page_black, null);
        initData(view);
        init(view);
        return view;
    }

    /**
     * 初始化图片数据
     * @param view fragment
     */
    public abstract void initData(View view) ;

    public void init(View view) {
        ViewPager viewPager = (ViewPager) view.findViewById(R.id.viewPager);
        viewPager.setAdapter(new MyNewPagerViewAdapter(getChildFragmentManager(),list));

        ImageView back = (ImageView) view.findViewById(R.id.viewPager_back);
        back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
                transaction.replace(R.id.realtabcontent,new HelpCenter());
                transaction.commit();
            }
        });
    }
}

具体使用调用时的用法

/**
 * Created by Administrator on 2016/11/14.
 *
 */

public class ElectricHelp extends Help{

    @Override
    public void initData(View view) {

        TextView textView= (TextView) view.findViewById(R.id.viewPager_tv);
        textView.setText("电厂信息");

        list.add(R.drawable.electric_guid1);
        list.add(R.drawable.electric_guid2);
        list.add(R.drawable.electric_guid3);
        list.add(R.drawable.electric_guid4);
        list.add(R.drawable.electric_guid5);
        list.add(R.drawable.electric_guid6);
    }
}
就这样就完了,以后如果还涉及到什么简单的只用展示页面的viewPager的话直接修改最后一个类的里面的图片资源就可以了,多少张没有限制。


至于界面文件相当简单就给个layout然后给个ID就可以了,至于横着排竖着排看心情,欧拉~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值