android - ViewPager في TabFragment لا يتم تحميل مرة ثانية




android-fragments android-viewpager android-nested-fragment (3)

أحاول إنشاء تطبيق يحتوي على ViewPager في جزء يمثل جزءًا من TabHost.

كل شيء يعمل بشكل جيد. لدي tabbar ، يمكنني تبديل علامات التبويب. عندما أنتقل إلى علامة التبويب مع ViewPager ، يتم عرض كل شيء بشكل صحيح. ولكن بمجرد ترك علامة التبويب هذه مع ViewPager وإرجاع علامة التبويب هذه ، لا يتم عرض المحتوى الخاص بي. إذا قمت بالتمرير إلى الجانب مرتين ، أرى صورتي التالية. وإذا كنت أعود مرتين ، فإني أرى أيضًا أن الصور محملة (ربما تكون خارج نطاق الشاشة) ، وأنظر إلى أن TabFragment الخاص بي يتم إعادة إعادته عندما أعود إليه ، ولكن الأجزاء الموجودة في ViewPager ليست كذلك.

لقد شملت شاشة نموذجية وبعض الكود.

يمكن لأي شخص أن يساعد؟

في صحتك!

@Override
public void onActivityCreated(Bundle savedInstanceState) {

    mProjectText = (TextView) getView().findViewById(R.id.projectText);
    mProjectText.setText(mActiveProject.getInspirationText());

    mAdapter = new AlbumAdapter(getFragmentManager(), mActiveProject.getInspiration());

    mPager = (ViewPager)getView().findViewById(R.id.pager);
    mPager.setAdapter(mAdapter);


    super.onActivityCreated(savedInstanceState);
}




public class AlbumAdapter extends FragmentStatePagerAdapter {

private ArrayList<ProjectContent> mItems;

public AlbumAdapter(FragmentManager fm, ArrayList<ProjectContent> items) {
    super(fm);
    this.mItems = items;
}

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

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

@Override
public int getItemPosition(Object object) {
    return POSITION_NONE;
}}


Answers

لقد تم البحث عن هذا لوقت طويل وجدت حلا. تغيير الصفحة الخاصة بك محول الصفحة FragmentPagerAdapter إلى FragmentStatePagerAdapter سبيل المثال:

class PageAdapter extends FragmentStatePagerAdapter {

لقد وجدت المشكلة. استغرق الأمر مني يومين ، لكن مهلاً ، تم إصلاحه.

بدلا من استخدام

mAdapter = new AlbumAdapter(getFragmentManager(), mActiveProject.getInspiration());

يجب عليك استخدامها

mAdapter = new AlbumAdapter(getChildFragmentManager(), mActiveProject.getInspiration());

كثيرا لمدة 5 أحرف.


لقد كنت أحاول العديد من الطرق المختلفة ، ولم يكن أي من مشكلاتي حقيقيًا. وفيما يلي كيف أقوم بحلها بمزيج من الحلول التي تقدمها لك جميعًا. شكرا لكم جميعا.

class PagerAdapter extends FragmentPagerAdapter {

    public boolean flag_refresh=false;

    public PagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int page) {
        FragmentsMain f;
        f=new FragmentsMain();
        f.page=page;
        return f;
    }

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

    @Override
    public int getItemPosition(Object item) {
        int page= ((FragmentsMain)item).page;

        if (page == 0 && flag_refresh) {
            flag_refresh=false;
            return POSITION_NONE;
        } else {
            return super.getItemPosition(item);
        }
    }

    @Override
    public void destroyItem(View container, int position, Object object) {

        ((ViewPager) container).removeView((View) object);
    }
}

أريد فقط تحديث الصفحة 0 بعد onResume ().

 adapter=new PagerAdapter(getSupportFragmentManager());
 pager.setAdapter(adapter);

@Override
protected void onResume() {
    super.onResume();

    if (adapter!=null) {
        adapter.flag_refresh=true;
        adapter.notifyDataSetChanged();
    }
}

في My FragmentsMain ، هناك "صفحة" صحيحة عامة ، والتي يمكن أن تخبرني ما إذا كانت هي الصفحة التي أريد تحديثها.

public class FragmentsMain extends Fragment {

private Cursor cursor;
private static Context context;
public int page=-1;




android android-fragments android-viewpager android-nested-fragment