ViewPager动态替换数据源------Fragment
2017-04-01 12:43
387 查看
鸣谢:参考博客:http://blog.csdn.net/z13759561330/article/details/40737381
现在就直接上代码吧,其实原理我也没太懂,刚好实现了,急用的话可以拿去直接用,空闲了去看看我上面鸣谢的博客吧
适配器Adapter
多说一句,适配器里面的重点代码是getItemPosition()和instantiateItem()这两个方法是原理核心部分。replaceFragment()方法已封装可直接调用;
接下来,看看怎么封装调用的
就这样,有问题欢迎留言
现在就直接上代码吧,其实原理我也没太懂,刚好实现了,急用的话可以拿去直接用,空闲了去看看我上面鸣谢的博客吧
适配器Adapter
import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentTransaction; import android.view.ViewGroup; import java.util.List; /** * Created by PersonalFolder on 17/4/1. */ public class FragAdapter extends FragmentPagerAdapter { private FragmentManager mFm; private List<Fragment> mFragments; private Fragment replaceFragment; private int mPosition; private boolean canReplace; public FragAdapter(FragmentManager fm, List<Fragment> fragments) { super(fm); // TODO Auto-generated constructor stub this.mFm=fm; this.mFragments=fragments; } /** * 动态替换fragment,可直接调用 * @param position 指定替换已有fragment的position,第一个是0; * @param fragment 待替换的新的Fragment; */ public void replaceFragment(int position,Fragment fragment){ if (position>=0&&position<mFragments.size()) { this.replaceFragment = fragment; this.mPosition = position; canReplace = true; this.notifyDataSetChanged(); } } @Override public int getItemPosition(Object object) { //TODO 这是重点继续研究 //return super.getItemPosition(object);//默认是不改变 return POSITION_NONE;//可以即时刷新看源码 } @Override public Object instantiateItem(ViewGroup container, int position) { //得到缓存的fragment Fragment fragment = (Fragment) super.instantiateItem(container, position); //得到tag,这点很重要 String fragmentTag = fragment.getTag(); if (canReplace&&mPosition==position) { //如果这个fragment需要更新 FragmentTransaction ft = mFm.beginTransaction(); //移除旧的fragment ft.remove(fragment); //换成新的fragment fragment = replaceFragment; //添加新fragment时必须用前面获得的tag,这点很重要 ft.add(container.getId(), fragment, fragmentTag); ft.attach(fragment); ft.commit(); //复位更新标志 canReplace=false; } return fragment; } @Override public Fragment getItem(int arg0) { // TODO Auto-generated method stub return mFragments.get(arg0); } @Override public int getCount() { // TODO Auto-generated method stub return mFragments.size(); } }
多说一句,适配器里面的重点代码是getItemPosition()和instantiateItem()这两个方法是原理核心部分。replaceFragment()方法已封装可直接调用;
接下来,看看怎么封装调用的
import android.os.Handler; import android.os.Message; import android.support.v4.app.Fragment; import android.support.v4.app.ListFragment; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.Toast; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private Button mainReplace; private ViewPager mainViewPager; private List<Fragment> fragmentList; private FragAdapter fragAdapter; private static final int REPLACE_TAG = 0X12; private Handler mainHandler = new Handler() { @Override public void handleMessage(Message msg) { // TODO 自动生成的方法存根 super.handleMessage(msg); switch (msg.what) { case REPLACE_TAG: fragAdapter.replaceFragment(1, new ThirdFragment()); break; default: } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); mainReplace = (Button) findViewById(R.id.main_replace); mainViewPager = (ViewPager) findViewById(R.id.main_viewpager); mainViewPager.setAdapter(fragAdapter = new FragAdapter(getSupportFragmentManager(), fragmentList)); mainReplace.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //如果操作比较耗时使用handler //mainHandler.sendEmptyMessage(REPLACE_TAG); //一般的操作直接执行 fragAdapter.replaceFragment(1, new ThirdFragment()); } }); } private void initView() { fragmentList = new ArrayList<>(); fragmentList.add(new FirstFragment()); fragmentList.add(new SecondFragment()); } }
就这样,有问题欢迎留言
相关文章推荐
- 实现ViewPager中的Fragment无感知动态替换
- 实现ViewPager中的Fragment无感知动态替换
- android ViewPager学习(四)FragmentStatePagerAdapter viewpager内fragment的替换
- 动态修改viewpager里面的fragment(添加和删除)
- ViewPager-------Fragment作为ViewPager的数据源(FragmentPagerAdapter)
- Viewpager动态添加删除Fragment
- ViewPager+Fragment实现选项卡,并且完美解决刷新和替换Fragment的问题
- Android编程心得-使用ActionBar+Fragment+ViewPager实现动态切换Menu效果
- ViewPager和Fragment结合,利用(HorizontalScrollView)实现指示器与ViewPager同时滑动的动态效果
- ViewPager-------Fragment作为ViewPager的数据源(FragmentStatePagerAdapter)
- android自定义动态滚动tab+viewpager+fragment
- 更新及替换ViewPager中的Fragment
- Android ViewPager + Fragment 替换 TabActivity
- ViewPager + Fragment 替换 TabActivity
- ViewPager + Fragment 替换 TabActivity
- Fragment+ViewPager 替换TabActivity
- 【Android】 Viewpager+Fragment实现滑动图片的动态加载
- ViewPager+Fragment实现Tabhost,动态添加删除Fragment,可供第三方使用的类库
- Android ViewPager + Fragment 替换 TabActivity
- Android:详情界面左右滑动看更多,ViewPager动态添加Fragment,仿51job详情界面