1

My trouble is: when i get new data, my viewpager that use my custom adapter do not update view. I discovered that many programmer got same bug, so i tried a lot of suggestion but no way works for me. So tired. One more time, read my source and help me understand why i fail with updating view pleaseee! Here is my FragmentAdapter:

private class SwipeyTabsPagerAdapter extends FragmentPagerAdapter implements
        SwipeyTabsAdapter {

    private final Context mContext;
    private String[] datas;

    public SwipeyTabsPagerAdapter(Context context, FragmentManager fm, String[] ds) {
        super(fm);
        this.mContext = context;
        datas=ds;
    }

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

    @Override
    public Fragment getItem(int position) {
        Log.e("new item:", datas[position]);
        return SwipeyTabFragment.newInstance(datas[position]);
    }

    @Override
    public int getCount() {
        return datas.length;
    }

    public TextView getTab(final int position, SwipeyTabs root) {
        TextView view = (TextView) LayoutInflater.from(mContext).inflate(
                R.layout.swipey_tab_indicator, root, false);
        view.setText(datas[position]);
        view.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                mViewPager.setCurrentItem(position);
            }
        });

        return view;
    }

}

and here is where i set adapter:

SwipeyTabsPagerAdapter adapter = new SwipeyTabsPagerAdapter(getApplicationContext(), getSupportFragmentManager(),dicts);
            mViewPager.setAdapter(adapter);
            mTabs.setAdapter(adapter);
            mViewPager.getAdapter().notifyDataSetChanged();

By logcat, can see clearly that: only first time, newItem be processed, so view can not be update.

Kiradev
  • 347
  • 2
  • 17

2 Answers2

1

I had also this problem and tried out everything I found in internet and it didn't work.

The working solution is to use FragmentStatePagerAdapter instead of FragmentPagerAdapter. FragmentPagerAdapter seems to "immutable" (at least it behaves that way).

See this thread for more information:

Update ViewPager dynamically?

Another working solution but bad one is to reinstantiate everything (ViewPager, Adapter) each time, programmatically remove the old one and add the new one.

Edit

I forgot something important in the adapter you also have to add this method:

@Override
public int getItemPosition(Object object) {
    return POSITION_NONE;
}
Community
  • 1
  • 1
User
  • 31,811
  • 40
  • 131
  • 232
0

Call notifyDataSetChanged() on your mTabs, too. See the implementation of this method in SwipeyTabsView class:

public void notifyDatasetChanged() {
    if (mPager != null && mAdapter != null) {
        initTabs();
        measure(mWidthMeasureSpec, mHeightMeasureSpec);
        calculateNewPositions(true);
    }
}
artkoenig
  • 7,117
  • 2
  • 40
  • 61