Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ViewPager+;FragmentStatePagerAdapter:如何使用新适配器重新创建所有片段_Android_Android Viewpager - Fatal编程技术网

Android ViewPager+;FragmentStatePagerAdapter:如何使用新适配器重新创建所有片段

Android ViewPager+;FragmentStatePagerAdapter:如何使用新适配器重新创建所有片段,android,android-viewpager,Android,Android Viewpager,我正在使用v4兼容性库。我有一个FragmentTabHost,第一个选项卡有一个使用FragmentStatePagerAdapter的ViewPager。问题是当我切换到其他选项卡时,更改第一个选项卡的ViewPager的数据,然后返回到第一个选项卡,用新数据重新创建新适配器并将其设置为ViewPager,但ViewPager中的前3个片段仍然引用旧数据 创建适配器的第一个选项卡中的我的代码(在onCreateView方法中调用): onDestroyView(): 我的适配器: p

我正在使用v4兼容性库。我有一个FragmentTabHost,第一个选项卡有一个使用FragmentStatePagerAdapter的ViewPager。问题是当我切换到其他选项卡时,更改第一个选项卡的ViewPager的数据,然后返回到第一个选项卡,用新数据重新创建新适配器并将其设置为ViewPager,但ViewPager中的前3个片段仍然引用旧数据

创建适配器的第一个选项卡中的我的代码(在onCreateView方法中调用):

onDestroyView():

我的适配器:

    public class TodayPagerAdapter extends FragmentStatePagerAdapter {

    private List<PostDTO> posts;
    private FragmentManager fm;

    public TodayPagerAdapter(FragmentManager fm, List<PostDTO> posts) {
        super(fm);
        this.fm = fm;
        this.posts = posts;
        if (posts == null)
            posts = new ArrayList<PostDTO>();
    }

    @Override
    public Fragment getItem(int page) {
        if (page == 0 && posts.size() > 1)
            return TodayPagerFragment.init(posts.size() - 1, posts.get(posts.size() - 1));
        if (page == posts.size() + 1)
            return TodayPagerFragment.init(0, posts.get(0));
        if (posts.size() > 1)
            return TodayPagerFragment.init(page - 1, posts.get(page - 1));
        return TodayPagerFragment.init(page, posts.get(page));
    }

    @Override
    public int getCount() {
        if (posts.size() <= 1)
            return posts.size();
        return posts.size() + 2;
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }
}
public void onDestroyView() {
    AppUtils.Log("Destroy view Today Fragment");
    mAdapter = null;
    mPager = null;
    super.onDestroyView();
}
    public class TodayPagerAdapter extends FragmentStatePagerAdapter {

    private List<PostDTO> posts;
    private FragmentManager fm;

    public TodayPagerAdapter(FragmentManager fm, List<PostDTO> posts) {
        super(fm);
        this.fm = fm;
        this.posts = posts;
        if (posts == null)
            posts = new ArrayList<PostDTO>();
    }

    @Override
    public Fragment getItem(int page) {
        if (page == 0 && posts.size() > 1)
            return TodayPagerFragment.init(posts.size() - 1, posts.get(posts.size() - 1));
        if (page == posts.size() + 1)
            return TodayPagerFragment.init(0, posts.get(0));
        if (posts.size() > 1)
            return TodayPagerFragment.init(page - 1, posts.get(page - 1));
        return TodayPagerFragment.init(page, posts.get(page));
    }

    @Override
    public int getCount() {
        if (posts.size() <= 1)
            return posts.size();
        return posts.size() + 2;
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }
}
    public class TodayPagerFragment extends AbstractFragment implements View.OnClickListener {

    int page;

    private ImageView iv_image;
    private LikeButton button_like;
    private PostDTO data;

    public static TodayPagerFragment init(int val, PostDTO data) {
        TodayPagerFragment frm = new TodayPagerFragment();
        Bundle args = new Bundle();
        args.putInt("page", val);
        frm.setArguments(args);
        frm.data = data;
        return frm;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        page = getArguments() != null ? getArguments().getInt("page") : 0;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.tab_today_viewpager, container, false);
        setupView(view);

        iv_image = (ImageView) view.findViewById(R.id.today_viewpager_image);
        button_like = (LikeButton) view.findViewById(R.id.today_button_like);
        button_like.setUp(true);

        initViews();
        return view;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.today_viewpager_image:
            ((BaseContainerFragment) getParentFragment().getParentFragment()).replaceFragment(TodayDetailFragment.init(this.data), true);
            break;

        case R.id.today_button_like:
            if (!AppConfig.getInstance().isLoggedIn || AppConfig.getInstance().appUser == null) {
                AppUtils.openLogin(getActivity());

            } else {
                String ms = getString(R.string.do_you_want_to_like_this_post_);
                if (data.isLiked())
                    ms = getString(R.string.do_you_want_to_unlike_this_post_);
                new MyDialogHandler().confirm(getActivity(), getString(R.string.like_confirm), ms, getString(R.string.no), getString(R.string.yes), new Runnable() {
                    @Override
                    public void run() {
                        new PostLikeTask(button_like, data, !data.isLiked()).execute();
                        // data.setLiked(!data.isLiked());
                    }
                }, null);
            }
            break;

        default:
            break;
        }
    }

    // Setup view data
    private void initViews() {
        iv_image.setOnClickListener(this);
        button_like.setOnClickListener(this);

        if (this.data != null) {
            AppUtils.Log("Current: //////// " + (data.toString().equals(AppConfig.getInstance().todayData.get(page))));
            // if (AppConfig.getInstance().appUser != null &&
            // AppConfig.getInstance().isLoggedIn)
            // new GetLikedTask().execute();
            // else
            button_like.setData(data.getLikes(), data.isLiked());
            // ImageLoader.getInstance().displayImage(AppConfig.SERVER_IMAGE_URL
            // + this.data.getImage(), iv_image);
            // onLoading(true);
            UrlImageViewHelper.setUrlDrawable(iv_image, AppConfig.SERVER_IMAGE_URL + this.data.getImage());
        }
    }
}