Позиция ViewPager не работает должным образом - PullRequest
1 голос
/ 07 января 2020

Попытка реализовать просмотр пейджера, по умолчанию он должен занимать только 0-ю позицию, но здесь он занимает 0-ю позицию и 1-ю позицию. Я ожидаю только 0-ю позицию в первый раз

public class ViewCardAdapter extends PagerAdapter {

    public static String cardNo;
    private Context context;
    private List<CardDetails> cardDetailsList;
    private ViewCardBinding viewCardBinding;

    public ViewCardAdapter (Context context, List<CardDetails> cardDetailsList, ViewCardBinding viewCardBinding) {
        this.context = context;
        this.cardDetailsList = cardDetailsList;
        this.viewCardBinding = viewCardBinding;
    }

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

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

    @NonNull
    @Override
    public Object instantiateItem (@NonNull ViewGroup container, int position) {

        LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE);
        View view = layoutInflater.inflate (R.layout.mycard_adapter_layout, null);


        container.addView (view);
        bind (cardDetailsList.get (position), view, position);
        return view;
    }

    @Override
    public void destroyItem (ViewGroup container, int position, @NonNull Object object) {
        container.removeView ((LinearLayout) object);
    }

    private void bind (CardDetails item, View view, int position) {
        TextView tv_cardNo = view.findViewById (R.id.tv_card_no);
        TextView tv_expiryDate = view.findViewById (R.id.tv_expire_date);
        EditText edt_card_status = view.findViewById (R.id.et_card_status);
        EditText edt_card_no = view.findViewById (R.id.et_card_no);

        try {
            item = cardDetailsList.get (position);
            String cardStatus = item.getCardStatus ();
            if (cardStatus.equals (ConstantFields.SUSPENDED) ||cardStatus.equals (ConstantFields.INACTIVE) ) {
                viewCardBinding.btnSuspended.setText (context.getResources ().getString (R.string.btn_activie));
            } else if (cardStatus.equals (ConstantFields.ACTIVE)) {
                viewCardBinding.btnSuspended.setText (context.getResources ().getString (R.string.suspend));
            }
            cardNo = String.valueOf (item.getCardNumber ());
            cardStatus = item.getCardStatus ();
            tv_cardNo.setText (cardNo);
            tv_expiryDate.setText (item.getCardExpiryDate ());
            edt_card_status.setText (cardStatus);
            edt_card_no.setText (cardNo);

        } catch (Exception e) {
            Log.e (TAG, "bind: ", e );
        }
    }

Попытка реализовать просмотр на пейджере, по умолчанию она должна занимать только 0-ю позицию, но здесь она занимает 0-ю позицию и 1-ю позицию , Я ожидаю только 0-ю позицию в первый раз

Ответы [ 3 ]

0 голосов
/ 07 января 2020

Viewpager делает 0-ю позицию и кеширует следующую. Используйте этот метод, чтобы изменить его поведение по умолчанию.

mViewPager.setOffscreenPageLimit(int);

Вы можете проверить этот Ответ для более подробной информации.

0 голосов
/ 07 января 2020

Используйте postdelayed для установки текущего элемента в пейджере представления

viewPager.postDelayed(() -> viewPager.setCurrentItem(position, true), 100);
0 голосов
/ 07 января 2020

Установить вручную положение, когда вы хотите установить так:

viewPager.setCurrentItem(0); 
...