Viewpager和Fragement实现翻页
来源:互联网 发布:菠菜代源码论坛 编辑:程序博客网 时间:2024/05/29 08:14
新建类,继承fragement,在里面重写oncreateview(),里面返回要呈现的view视图。
public class FragementFirst extends Fragment implements OnClickListener {private Button btn;private TextView tv;private View view;@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// TODO Auto-generated method stubview = inflater.inflate(R.layout.fragement_first, container, false);init();return view;}public void init() {btn = (Button) view.findViewById(R.id.button1);tv = (TextView) view.findViewById(R.id.textView1);btn.setOnClickListener(this);}@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif (v == btn) {tv.setText("click");}}}
如果要添加事件,就实现onclick接口,跟活动的操作差不多。
活动类:
public class MainActivity extends FragmentActivity {private ViewPager viewpager;private FramPagerAdap pageradapter;private FragementFirst framfirst;private FragementSecond framsecond;private FragementThird framthird;// 页面列表private List framlist = new ArrayList();// 标题列表private List<String> titlelist = new ArrayList<String>();// 设置标题的属性private PagerTitleStrip pagestrip;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.acy_main);init();}public void init() {viewpager = (ViewPager) findViewById(R.id.viewpager);// 加入页面framfirst = new FragementFirst();framsecond = new FragementSecond();framthird = new FragementThird();framlist.add(framfirst);framlist.add(framsecond);framlist.add(framthird);// 加入标题titlelist.add("第一页");titlelist.add("第二页");titlelist.add("第二页");pageradapter = new FramPagerAdap(getSupportFragmentManager(), framlist,titlelist);viewpager.setAdapter(pageradapter);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
在活动中,将fragement加载进入。
适配器:
public class FramPagerAdap extends FragmentPagerAdapter{private List<Fragment> framlist;private List<String> titlelist;public FramPagerAdap(FragmentManager fm, List<Fragment> framlist,List<String> titlelist) {super(fm);// TODO Auto-generated constructor stubthis.framlist = framlist;this.titlelist = titlelist;}@Overridepublic Fragment getItem(int item) {// TODO Auto-generated method stubreturn framlist.get(item);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn framlist.size();}@Overridepublic CharSequence getPageTitle(int position) {// TODO Auto-generated method stubreturn titlelist.get(position);}}
活动的xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="wrap_content" android:layout_height="wrap_content" > <android.support.v4.view.PagerTitleStrip android:id="@+id/pagertitle" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </android.support.v4.view.ViewPager></RelativeLayout>
fragement xml:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="50dp" android:text="TextView1" /></RelativeLayout>
注意:
1.跳转到其他活动:使用getactivity 来获得当前活动的实例。
在fragement中调用实例:
@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent intent;if (v == btn) {//跳转到登录界面intent = new Intent(getActivity(), LoginActivity.class);startActivity(intent);}}
注意:
1.监听滑动到每页,监听应该对viewpager监听,而不是适配器,否则不起作用。
viewPager.setOnPageChangeListener(new OnPageChangeListener() {// 当选中某一页@Overridepublic void onPageSelected(int position) {// TODO Auto-generated method stubLog.e("***", ";" + position);}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {// TODO Auto-generated method stub}@Overridepublic void onPageScrollStateChanged(int arg0) {// TODO Auto-generated method stub}});
2.当有时候,可能会发生Fragment错位的现象,这是因为在每次滑动时,getItem()中都是相同的碎片的时候,会进行替换。我们来看下FragmentPagerAdapter源码中实例化方法:
@Overridepublic Object instantiateItem(ViewGroup container, int position) {if (mCurTransaction == null) {//FragmentTransaction 对象初始化mCurTransaction = mFragmentManager.beginTransaction();}final long itemId = getItemId(position);// Do we already have this fragment?String name = makeFragmentName(container.getId(), itemId);Fragment fragment = mFragmentManager.findFragmentByTag(name);//当找到相同id的碎片 attack()重新粘上碎片.否则,将新的碎片加载进去。if (fragment != null) {if (DEBUG)Log.v(TAG, "Attaching item #" + itemId + ": f=" + fragment);mCurTransaction.attach(fragment);} else {fragment = getItem(position);if (DEBUG)Log.v(TAG, "Adding item #" + itemId + ": f=" + fragment);mCurTransaction.add(container.getId(), fragment,makeFragmentName(container.getId(), itemId));}if (fragment != mCurrentPrimaryItem) {fragment.setMenuVisibility(false);fragment.setUserVisibleHint(false);}return fragment;}
当你同时沾上两片一样的碎片的时候。有可能会导致错位,当然也有可能不会(就是相互覆盖得很好)。
我们为了避免这种情况,在getItem()中,添加处理就可以了。
//当碎片页以前没加载进去过if (null == fManager.findFragmentById(position)) {return fragment;}return fManager.findFragmentById(position);
0 0
- Viewpager和Fragement实现翻页
- DrawerLayout+Fragement+ViewPager+PagerTabStrip实现双导航
- 仿viewPager-实现滑动翻页
- 布局demo三:viewPager实现翻页效果
- ViewPager实现一屏多页 扇形翻页效果
- Android ViewPager+Fragment实现首页滑动翻页
- Android ViewPager实现左右滑动翻页
- Fragment与ViewPager实现页面滑动翻页
- viewpager实现翻页效果(fragment)
- 一步步实现Viewpager卡片翻页效果
- ViewPager整合Fragment实现导航或滑动翻页
- Android不继承ViewPager实现自动滚动翻页功能
- 带指示器的ViewPager循环翻页的实现
- android ViewPager嵌套Fragment实现侧滑翻页
- HorizontalScrollView 实现 ViewPager 可滑动翻页的tab
- viewpage和fragement
- Activity和Fragement生命周期
- 可以滑动的Fragement(viewpager)
- GDB调试子进程
- Linux命令学习之--cat
- PreparedStatement的用法
- 推出网页版短视频分享服务
- POJ 1408 Fishnet
- Viewpager和Fragement实现翻页
- linux中fork()函数详解(原创!!实例讲解)
- C/C++常用库函数收集
- 采用Stanford Parser进行中文语法解析
- 【算法导论】最大二分匹配
- 利用Stanford Parser进行中文行为抽取
- 自定义控件--仿QQ表情面板
- IOS学习之路 之 icon 启动画面
- POJ 1155 TELE(树形DP)