ViewPager+Fragment+GridView方案notifyDataSetChanged()无法刷新数据问题
来源:互联网 发布:淘宝网六个月宝宝衣服 编辑:程序博客网 时间:2024/06/07 06:34
采用ViewPager+Fragment+GridView方案实现类似qq的多屏滑动的效果,但是在运行问题中发现了第三屏的GridView修改数据是无法刷新,采用notifyDataSetChanged()也无法刷新,在网上找了很多例子多是讲到在FragmentPagerAdapter中除清缓存,经过验证只做这步是不行的,无奈之下只能从Fragment生命周期入手。结合网上的例子给出了解决方案:
首先是MyFragmentPagerAdapter.java
import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.app.FragmentTransaction;/** * * @author Tom.Cai * */public class MyFragmentPagerAdapter extends FragmentPagerAdapter { private ArrayList<Fragment> fragments; private FragmentManager fm; public MyFragmentPagerAdapter(FragmentManager fm) { super(fm); } public MyFragmentPagerAdapter(FragmentManager fm, ArrayList<Fragment> fragments) { super(fm); this.fm = fm; this.fragments = fragments; } @Override public int getCount() { return fragments.size(); } @Override public Fragment getItem(int arg0) { return fragments.get(arg0); } @Override public int getItemPosition(Object object) { return POSITION_NONE; } public void setFragmentsList(ArrayList<Fragment> fragmentsList) { if(this.fragments != null){ FragmentTransaction ft = fm.beginTransaction(); for(Fragment f:fragmentsList){ ft.remove(f); } ft.commit(); ft= null; this.fragments = fragmentsList; notifyDataSetChanged(); }}}
然后是the GridView inside of Fragment
/** * @Function: 第三个屏幕 * @Date: 2013-12-11 * @Time: 下午3:45:32 * @author Tom.Cai */public class ThreeFragment extends Fragment {private GridView gridview;private ArrayList<HashMap<String, Object>> listImageItem;private SimpleAdapter simpleAdapter;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { View view = inflater.inflate(R.layout.threefragment, container, false); InitView(view); InitListener(); return view;}private void InitView(View view) {gridview = (GridView) view.findViewById(R.id.gridview);}private void InitListener() {gridview.setOnItemClickListener(new MyItemClickListener());gridview.setOnItemLongClickListener(new MyItemLongClickListener());}@Overridepublic void onStart() {// 生成动态数组,并且转入数据 #在onStart()方法中加载数据,就在Fragment中可以动态刷新数据#listImageItem = new ArrayList<HashMap<String, Object>>();for (int i = 0; i < 9; i++) {HashMap<String, Object> map = new HashMap<String, Object>(); map.put("ItemImage", R.drawable.user);// 添加图像资源的IDmap.put("ItemText", i+"");// 按序号做ItemTextlistImageItem.add(map);}}simpleAdapter = new SimpleAdapter(getActivity().getApplicationContext(), listImageItem,R.layout.contact_list_item_gridview, new String[] {"ItemImage", "ItemText" }, new int[] { R.id.displayImg,R.id.displayName });//添加图片绑定simpleAdapter.setViewBinder(new ViewBinder() {public boolean setViewValue(View view, Object data,String textRepresentation) {if (view instanceof ImageView && data instanceof Drawable) {ImageView iv = (ImageView) view;iv.setImageDrawable((Drawable) data);return true;} elsereturn false;}});gridview.setAdapter(simpleAdapter);super.onStart();}}
除了在MyFragentPagerAdapter中清除缓存外,另外重要的是在onStart()方法中加载数据,就在Fragment中可以动态刷新数据,本例中就是生产动态数组和setAdapt();更多文章请查看我的博客:http://blog.csdn.net/caicongyang
2 0
- ViewPager+Fragment+GridView方案notifyDataSetChanged()无法刷新数据问题
- notifyDataSetChanged() 无法刷新问题
- ViewPager数据修改使用notifyDataSetChanged无刷新的问题
- 解决viewpager adpter.notifyDataSetChanged不刷新问题
- ViewPager中调用notifyDataSetChanged无刷新最终方案.
- ViewPager中使用FragmentPagerAdapter.notifyDataSetChanged无法更新当前Fragment解决方案
- ViewPager挂载Fragment刷新Fragment数据
- android fragment页面切换GridView数据不能刷新的问题
- Viewpager刷新数据问题
- Android FragmentStatePagerAdapter.notifyDataSetChanged()刷新数据的问题
- 解决ViewPager调用notifyDataSetChanged()时,界面无刷新问题
- 已解决:ViewPager的notifyDataSetChanged不刷新问题
- Android ViewPager刷新Fragment数据(ViewPager获取Fragment对象)
- Android ViewPager刷新Fragment数据(ViewPager获取Fragment对象)
- Viewpager之notifyDataSetChanged无刷新
- ViewPager 调用 notifyDataSetChanged()无刷新
- android Viewpager中fragment的数据刷新
- viewPager嵌套fragment的数据刷新
- 2013.12.16
- java 类与对象 5---toString()方法
- 深入理解Java中的final关键字
- tomcat启动的内存溢出解决
- 建立树莓派raspberry交叉编译环境以及编译内核
- ViewPager+Fragment+GridView方案notifyDataSetChanged()无法刷新数据问题
- TOJ 1252
- 解决window.onload事件重复赋值
- 机器视觉中常用的数据测试集
- Windows下UDP编程 客户端
- ScrollView去掉滚动条
- 利用栈检查程序中成对符号使用的正确性
- 字典树
- cocos2dx版本2.2.1 创建新工程