FragmentActivity中 进行重新加载item对象不起作用 重新初始化Adapter对象不行 notifyDataSetChanged 也不行 在定义的 Adapter对象中添加一个方法
setFragmentsList 就可以解决了以下是代码实现
1.自定义Adapter
public class FragmentsPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> mFragments;
public FragmentsPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.mFragments = fragments;
}
public void setFragmentsList(FragmentManager fm, List<Fragment> fragments){
if (this.mFragments != null) {
FragmentTransaction ft = fm.beginTransaction();
for (Fragment f : this.mFragments) {
ft.remove(f);
}
ft.commit();
ft = null;
fm.executePendingTransactions();
}
this.mFragments = fragments;
notifyDataSetChanged();
}
@Override
public Fragment getItem(int position) {
return mFragments.get(position);
}
@Override
public int getCount() {
return mFragments.size();
}
/**
* A dummy fragment representing a section of the app, but that simply
* displays dummy text.
*/
public static class DummySectionFragment extends Fragment {
public DummySectionFragment() {
}
public static final String ARG_SECTION_NUMBER = "section_number";
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
TextView textView = new TextView(getActivity());
textView.setGravity(Gravity.CENTER);
Bundle args = getArguments();
textView.setText(Integer.toString(args.getInt(ARG_SECTION_NUMBER)));
return textView;
}
}
}
2.设置Adapter :Handler中进行重新设置的Adapter
private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 0:
mPageViews = new ArrayList<Fragment>();
PlayerFragment playerView = null;
PlayerData player = null;
for (int i = 0; i < mListPlayer.size(); i++) {
player = mListPlayer.get(i);
playerView = new PlayerFragment(context, player);
mPageViews.add(playerView);
}
if(mAdapter == null){
mAdapter = new FragmentsPagerAdapter(getSupportFragmentManager(), mPageViews);
} else{ // 设置
mAdapter.setFragmentsList(getSupportFragmentManager(), mPageViews);
}
mViewPager.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
break;
case 1:
mAdapter.notifyDataSetChanged();
break;
case 2:
Toast.makeText(context, R.string.no_data, Toast.LENGTH_LONG).show();
break;
case 3:
mPageViews = new ArrayList<Fragment>();
InstructorFragment instructorView = null;
Instructor instructor = null;
for (int i = 0; i < mListInstructor.size(); i++) {
instructor = mListInstructor.get(i);
instructorView = new InstructorFragment(context, instructor);
mPageViews.add(instructorView);
}
if(mAdapter == null){
mAdapter = new FragmentsPagerAdapter(getSupportFragmentManager(), mPageViews);
} else{
mAdapter.setFragmentsList(getSupportFragmentManager(), mPageViews);
}
mViewPager.setAdapter(mAdapter);
mAdapter.notifyDataSetChanged();
break;
default:
break;
}
}
};