无法使FragmentPagerAdapter更新Fragments内容

时间:2016-05-06 10:31:13

标签: android android-viewpager fragmentpageradapter

我正在尝试更新传递给我的适配器的数据,因此更新内容依赖于这些数据的片段,

这是adpater:

import android.app.Fragment;
import android.app.FragmentManager;
import android.os.Bundle;
import android.support.v13.app.FragmentPagerAdapter;
public class ScheduleFragment_Pager_adapter extends FragmentPagerAdapter {

        private String CurrentSelectedYearID="",CurrentSelectedTermID="";

        public ScheduleFragment_Pager_adapter(FragmentManager fm , String SelectedYearID , String SelectedTermID) {
            super(fm);
            CurrentSelectedYearID = SelectedYearID;
            CurrentSelectedTermID = SelectedTermID;
        }

        @Override
        public Fragment getItem(int position) {

            Bundle bundle = new Bundle();
            bundle.putString("CurrentSelectedYearID", CurrentSelectedYearID);
            bundle.putString("CurrentSelectedTermID",CurrentSelectedTermID);

            if(position==0)
            {
                ClassesFragment classesFragment = new ClassesFragment();
                classesFragment.setArguments(bundle);
                return classesFragment;
            }
            else if(position==1)
            {
                ExamsFragment examsFragment = new ExamsFragment();
                examsFragment.setArguments(bundle);
                return examsFragment;
            }

            return null;
        }

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

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

        @Override
        public CharSequence getPageTitle(int position) {
            switch (position) {
                case 0:
                    return "Classes";
                case 1:
                    return "Exams";
            }
            return null;
        }
    }

我曾尝试使用此answer,但它没有用,或者我无法理解!

以及我如何使用适配器以及我如何尝试更新它。

在主片段onCreateView处[我正在使用嵌套片段]

  mViewPager.setAdapter(new ScheduleFragment_Pager_adapter(getChildFragmentManager(), mSelectedYearID, mSelectedTermID));

我像这样更新适配器

@Override    
public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if(requestCode == 0){
            if(resultCode == Activity.RESULT_OK){
                mSelectedTermID = data.getStringExtra("mSelectedTermID");
                mSelectedYearID = data.getStringExtra("mSelectedYearID");
                mViewPager.getAdapter().notifyDataSetChanged();
            }
        }
    }

onActivityResult位于mSelectedTermIDmSelectedYearID的位置。

任何帮助?

3 个答案:

答案 0 :(得分:1)

尝试使用FragmentStatePagerAdapter

Explained here

答案 1 :(得分:1)

在片段

中创建适配器类变量
private ScheduleFragment_Pager_adapter adapter;

主片段的onCreateView

adapter = new ScheduleFragment_Pager_adapter(getChildFragmentManager(), mSelectedYearID, mSelectedTermID)
 mViewPager.setAdapter(adapter);
适配器中的

public void setValues( String SelectedYearID , String SelectedTermID) {
        CurrentSelectedYearID = SelectedYearID;
        CurrentSelectedTermID = SelectedTermID;
    }

onActivityResult

  adapter.setValues(mSelectedTermID, mSelectedYearID);
  adapter.notifyDataSetChanged();

答案 2 :(得分:0)

FragmentPagerAdapter存储用户访问的每个页面的所有片段。

通过返回POSITION_NONE并且每次调用notifyDataSetChanged()适配器都应该删除缓存的片段并重新创建一个新的。

您是否检查过notifyDataSetChanged()?

请注意,通过返回POSITION_NONE,您可以放松缓存机制,对于大量视图,可能会出现多个页面问题。

您可以实现观察者模式 - 注册创建的片段,并在需要更新时调用它们。