Первый фрагмент просмотра не загружается при переходе от третьего фрагмента - PullRequest
0 голосов
/ 05 июля 2019

Здесь, когда я приземлился в первый фрагмент, все представления загружаются и прокручиваются, но когда я прихожу из третьего фрагмента, то есть из какого-то другого действия, мне нужно попасть в третий фрагмент, и при переходе к первому фрагменту представления не загружаются, что делает невозможным прокрутку , Firstfragment xml содержит обзор и элементы группы.

Класс MyActivity:

    MyAdapter adapter = new MyAdapter(this, getSupportFragmentManager(), fragments);

        viewPager.setOffscreenPageLimit(3);

        viewPager.setAdapter(adapter);

        tabLayout.setupWithViewPager(viewPager);

//MyAdapter

    public class MyAdapter extends FragmentPagerAdapter {

    private Context mContext;
    private List<Fragment> fragmentList ;

    public MyAdapter(Context context, FragmentManager fm,List<Fragment> fragmentList) {
        super(fm);
        mContext = context;
        this.fragmentList = fragmentList;
    }

    @Override
    public Fragment getItem(int position) {
        return  fragmentList.get(position);
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0:
                return mContext.getString(R.string.firstfragmentname);
            case 1:
                return mContext.getString(R.string.seconsfrag);
            case 2:
                return mContext.getString(R.string.thirdfrag);

            default:
                return null;
        }
      }
    }

//XML has custom viewpager
<ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="@dimen/headerHeight"
            android:layout_marginBottom="@dimen/footerHeight"
            android:fadingEdgeLength="0dp">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginStart="@dimen/dp_30_60"
                android:layout_marginTop="10dp"
                android:layout_marginEnd="@dimen/dp_30_60"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/sp_header"
                    style="@style/pageTitle"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="10dp"
                    android:layout_marginBottom="10dp"
                    android:text="@string/my_bill" />

                <com.view.Tab
                    android:id="@+id/tab_custom"
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/tab_height" />

                <com.custom.CustomViewPager
                    android:id="@+id/sp_viewpager"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_marginStart="@dimen/dp_10_53"
                    android:layout_marginTop="4dp"
                    android:layout_marginEnd="@dimen/dp_10_53"
                    android:layout_marginBottom="4dp" />
            </LinearLayout>
        </ScrollView>

//CustomViepager

    public class CustomViepager extends ViewPager {

    public CustomViepager(Context context) {
        super(context);
        initPageChangeListener();
    }

    public CustomViepager(Context context, AttributeSet attrs) {
        super(context, attrs);
        initPageChangeListener();
    }

    private void initPageChangeListener() {
        addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                requestLayout();
            }
        });
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        View child = getChildAt(getCurrentItem());
        if (child != null) {
            child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
            int h = child.getMeasuredHeight();
            heightMeasureSpec = MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY);
        }
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    }

    @Override
    public void setCurrentItem(int item) {
        super.setCurrentItem(item, false);
    }

    @Override
    public void setCurrentItem(int item, boolean smoothScroll) {
        super.setCurrentItem(item, false);
     }
    }

1 Ответ

0 голосов
/ 08 июля 2019

Используйте простой видовой пейджер и попробуйте использовать его вот так

CustomPagerAdapter

import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentStatePagerAdapter

class MyPagerAdapter(fm: FragmentManager, behaviour: Int) : FragmentStatePagerAdapter(fm, behaviour) {

    private val mFragmentList = ArrayList<Fragment>()

    override fun getItem(position: Int): Fragment {
        return mFragmentList[position]
    }

    override fun getCount(): Int {
        return mFragmentList.size
    }

    fun addFragment(fragment: Fragment) {
        mFragmentList.add(fragment)
    }


}

В действии / фрагмент

private var mAdapter: MyPagerAdapter? = null

в onCreate

mAdapter = MyPagerAdapter(getChildFragmentManager(), FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)
mAdapter?.addFragment(YOUR_FIRST_FRAGMENT)
mAdapter?.addFragment(YOUR_SECOND_FRAGMENT)
mAdapter?.addFragment(YOUR_THIRD_FRAGMENT)

sp_viewpager.offscreenPageLimit = 3
sp_viewPAger.adapter = mAdapter

Если вы хотите приземлиться на нужную позицию, после кода выше напишите

sp_viewpager.setCurrentItem(1/2/3,true/false)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...