FragmentActivity 进行重新加载item对象不起作用 notifyDataSetChanged 也不行



FragmentActivity 进行重新加载item对象不起作用 notifyDataSetChanged 也不行

FragmentActivity中 进行重新加载item对象不起作用 重新初始化Adapter对象不行 notifyDataSetChanged 也不行 在定义的 Adapter对象中添加一个方法

setFragmentsList 就可以解决了以下是代码实现

1.自定义Adapter

 

  1. public class FragmentsPagerAdapter extends FragmentPagerAdapter {
  2.     private List<Fragment> mFragments;
  3.     public FragmentsPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
  4.         super(fm);
  5.         this.mFragments = fragments;
  6.     }
  7.     public void setFragmentsList(FragmentManager fm, List<Fragment> fragments){
  8.         if (this.mFragments != null) {
  9.             FragmentTransaction ft = fm.beginTransaction();
  10.             for (Fragment f : this.mFragments) {
  11.                 ft.remove(f);
  12.             }
  13.             ft.commit();
  14.             ft = null;
  15.             fm.executePendingTransactions();
  16.         }
  17.         this.mFragments = fragments;
  18.         notifyDataSetChanged();
  19.     }
  20.     @Override
  21.     public Fragment getItem(int position) {
  22.         return mFragments.get(position);
  23.     }
  24.     @Override
  25.     public int getCount() {
  26.         return mFragments.size();
  27.     }
  28.     /**
  29.      * A dummy fragment representing a section of the app, but that simply
  30.      * displays dummy text.
  31.      */
  32.     public static class DummySectionFragment extends Fragment {
  33.         public DummySectionFragment() {
  34.         }
  35.         public static final String ARG_SECTION_NUMBER = ”section_number”;
  36.         @Override
  37.         public View onCreateView(LayoutInflater inflater, ViewGroup container,
  38.                 Bundle savedInstanceState) {
  39.             TextView textView = new TextView(getActivity());
  40.             textView.setGravity(Gravity.CENTER);
  41.             Bundle args = getArguments();
  42.             textView.setText(Integer.toString(args.getInt(ARG_SECTION_NUMBER)));
  43.             return textView;
  44.         }
  45.     }
  46. }

2.设置Adapter :Handler中进行重新设置的Adapter

 

 

  1. private Handler mHandler = new Handler(){
  2.     @Override
  3.     public void handleMessage(Message msg) {
  4.         super.handleMessage(msg);
  5.         switch (msg.what) {
  6.         case 0:
  7.             mPageViews = new ArrayList<Fragment>();
  8.             PlayerFragment playerView = null;
  9.             PlayerData player = null;
  10.             for (int i = 0; i < mListPlayer.size(); i++) {
  11.                 player = mListPlayer.get(i);
  12.                 playerView = new PlayerFragment(context, player);
  13.                 mPageViews.add(playerView);
  14.             }
  15.             if(mAdapter == null){
  16.                 mAdapter = new FragmentsPagerAdapter(getSupportFragmentManager(), mPageViews);
  17.             } else{ // 设置
  18.                 mAdapter.setFragmentsList(getSupportFragmentManager(), mPageViews);
  19.             }
  20.             mViewPager.setAdapter(mAdapter);
  21.             mAdapter.notifyDataSetChanged();
  22.             break;
  23.         case 1:
  24.             mAdapter.notifyDataSetChanged();
  25.             break;
  26.         case 2:
  27.             Toast.makeText(context, R.string.no_data, Toast.LENGTH_LONG).show();
  28.             break;
  29.         case 3:
  30.             mPageViews = new ArrayList<Fragment>();
  31.             InstructorFragment instructorView = null;
  32.             Instructor instructor = null;
  33.             for (int i = 0; i < mListInstructor.size(); i++) {
  34.                 instructor = mListInstructor.get(i);
  35.                 instructorView = new InstructorFragment(context, instructor);
  36.                 mPageViews.add(instructorView);
  37.             }
  38.             if(mAdapter == null){
  39.                 mAdapter = new FragmentsPagerAdapter(getSupportFragmentManager(), mPageViews);
  40.             } else{
  41.                 mAdapter.setFragmentsList(getSupportFragmentManager(), mPageViews);
  42.             }
  43.             mViewPager.setAdapter(mAdapter);
  44.             mAdapter.notifyDataSetChanged();
  45.             break;
  46.         default:
  47.             break;
  48.         }
  49.     }
  50. };