search

Home  >  Q&A  >  body text

android - After loading back from the network, the style of the control is wrong.

The viewpager I set is large in the middle and small on both sides. However, when the first network request came back, the one in the middle was the same size as the one on the right.
I have put it in the sub-thread, but it still doesn't work. I hope God will answer. . .

public class ImpressCardFragment extends Fragment {


    @BindView(R.id.vp_pager)
    ViewPager mPager;
    private List<Impress.ObjectBean.DataBean> mList;
    private Unbinder bind;
    private List<PageFragment> fragmentList;
    private ImpressCardAdapter cartAdapter;
    private ACache aCache;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_impress_card, container, false);
        bind = ButterKnife.bind(this, rootView);
        transformerPager();
        aCache = ACache.get(getContext());
        mList = new ArrayList<>();
        DisplayMetrics metric = new DisplayMetrics();
        getActivity().getWindowManager().getDefaultDisplay().getMetrics(metric);
        int width = metric.widthPixels;     // 屏幕宽度(像素)
        int height = metric.heightPixels;   // 屏幕高度(像素)
        float density = metric.density;      // 屏幕密度(0.75 / 1.0 / 1.5)
        int densityDpi = metric.densityDpi;
        mPager.setOffscreenPageLimit(4);
        mPager.setPageMargin(-width / 4);
        fragmentList = new ArrayList<>();
        cartAdapter = new ImpressCardAdapter(getChildFragmentManager(), getContext(), fragmentList);
        mPager.setAdapter(cartAdapter);
        return rootView;
    }

    @Override
    public void onResume() {
        super.onResume();
        //缓存
        Impress impress = (Impress) aCache.getAsObject("impressCart");
//        if (impress == null) {
//            getData();
//        } else {
//
//            mList.clear();
//            mList.addAll(impress.object.get(0).data);
//            fragmentList.clear();
//            for (int i = 0; i < mList.size(); i++) {
//                fragmentList.add(new PageFragment(mList.get(i)));
//            }
//            cartAdapter.notifyDataSetChanged();
//        }
        handler.post(mRunnable);
    }

    /**
     * viewPager的转换效果
     */
    void transformerPager() {
        mPager.setPageTransformer(true, new ViewPager.PageTransformer() {
            public float position;

            public void transformPage(View page, float position) {
                this.position = position;
                if (position < -1) {
                    // This page is way off-screen to the left.
                } else if (position <= 1) {
                    if (position < 0) {
                        if (position < -0.4f)
                            position = -0.4f;
                        page.setScaleY(1.4f + position);
                        page.setScaleX(1.4f + position);
                    } else {
                        if (position > 0.4)
                            position = 0.4f;
                        page.setScaleY(1.4f - position);
                        page.setScaleX(1.4f - position);
                    }
                } else {
                    // This page is way off-screen to the right.
                }
            }
        });
    }

    @Override
    public void onDestroyView() {
        bind.unbind();
        handler.removeCallbacks(mRunnable);
        super.onDestroyView();
    }

    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case 1:
                    Impress body = (Impress) msg.obj;
                    aCache.put("impressCart", body, 2);
                    mList.clear();
                    mList.addAll(body.object.get(0).data);
                    fragmentList.clear();
                    for (int i = 0; i < mList.size(); i++) {
                        fragmentList.add(new PageFragment(mList.get(i)));
                    }
                    cartAdapter.notifyDataSetChanged();
                    break;
            }

        }
    };
  private Runnable mRunnable = new Runnable() {
        @Override
        public void run() {
            HttpClient.createRequest(HttpTask.class).impressIndex(String.valueOf(0), String.valueOf(10)).enqueue(new Callback<Impress>() {

                @Override
                public void onResponse(Call<Impress> call, Response<Impress> response) {
                    if (response.body().code.equals(Constants.REQUESTID_SUCCESS)) {
                        Impress body = response.body();
                        Message message = handler.obtainMessage(1);
                        message.obj = body;
                        handler.sendMessage(message);
                    }
                }

                @Override
                public void onFailure(Call<Impress> call, Throwable t) {
                    Toast.makeText(getContext(), "服务器故障", Toast.LENGTH_SHORT).show();
                }
            });
        }
    };
}

PHP中文网PHP中文网2774 days ago681

reply all(1)I'll reply

  • 習慣沉默

    習慣沉默2017-05-16 13:27:00

    Refer to this library: https://github.com/hongyangAn...

    reply
    0
  • Cancelreply