既然是技术博客,虽然不求又多少人看,但还是先上代码吧,后面的内容是题外话。

package com.example.fgb;import android.os.Bundle;
import android.support.v4.app.*;import android.support.v4.view.ViewPager;
import android.view.View;import android.widget.ImageButton;import com.example.fgb.myFragment.FragmentA;
import com.example.fgb.myFragment.FragmentB;
import com.example.fgb.myFragment.FragmentC;import java.util.ArrayList;
import java.util.List;//继承fragmentActivity
public class MainActivity extends FragmentActivity implements View.OnClickListener{private ViewPager viewPager;//重要组件private List<Fragment> list;private FragmentManager fragmentManager;private myAdapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);list=new ArrayList<Fragment>();viewPager= (ViewPager) findViewById(R.id.viewpaper);fragmentManager= getSupportFragmentManager();adapter=new myAdapter(fragmentManager,list);init();viewPager.setAdapter(adapter);ImageButton btna= (ImageButton) findViewById(R.id.btna);ImageButton btnb= (ImageButton) findViewById(R.id.btnb);ImageButton btnc= (ImageButton) findViewById(R.id.btnc);btna.setOnClickListener(this);btnb.setOnClickListener(this);btnc.setOnClickListener(this);}public void init(){list.add(new FragmentA());list.add(new FragmentB());list.add(new FragmentC());}@Overridepublic void onClick(View v) {switch (v.getId()){case R.id.btna:viewPager.setCurrentItem(0);break;case R.id.btnb:viewPager.setCurrentItem(1);break;case R.id.btnc:viewPager.setCurrentItem(2);break;}}//自定义fragment适配器class myAdapter extends FragmentPagerAdapter{private List<Fragment> listl;public myAdapter(FragmentManager fm) {super(fm);}public myAdapter(FragmentManager fm,List<Fragment> list1) {super(fm);this.listl=list1;}@Overridepublic Fragment getItem(int i) {return listl.get(i);}@Overridepublic int getCount() {return listl.size();}}
}

讲一下思路,viewpaper可是实现类似与微信主界面的一个组件,以前一直想做这个东西,但是水平不够,码代码的技术不够熟练。现在技术又一定提高后,才明白这个东西并不难。主要思路就是构建一个viewpaper,以及这个组件的适配器,配合fragment使用,达到微信的效果。OK,下面看viewpaper在xml 中的用法

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><android.support.v4.view.ViewPager
            android:id="@+id/viewpaper"android:layout_width="match_parent"android:layout_height="390dp"android:layout_weight="1" /><LinearLayout
        android:orientation="horizontal"android:layout_width="match_parent"android:layout_height="0dp"android:layout_gravity="center_horizontal"android:layout_weight="1"><ImageButton
            android:layout_width="0dp"android:layout_height="wrap_content"android:id="@+id/btna"android:src="@mipmap/ic_launcher"android:layout_weight="0.33" /><ImageButton
            android:layout_width="0dp"android:layout_height="wrap_content"android:id="@+id/btnb"android:src="@mipmap/ic_launcher"android:layout_weight="0.33" /><ImageButton
            android:layout_width="0dp"android:layout_height="wrap_content"android:id="@+id/btnc"android:src="@mipmap/ic_launcher"android:layout_weight="0.33" /></LinearLayout></LinearLayout>

如同一般的组件一样,一开始我的思路是,要在这个页面中加入自己的fragment,其实,viewpaper本事就是一堆fragment的集合。如果在这个xml中加入fragment,反而没有任何的作用。同时,viewpaper本身就带有滑动翻页的效果,所以不需要我们码代码实现翻页的效果。以前一直以为滑动翻页都是自己写的自定义手势的使用。而我们需要使用的fragment,其实是在自己的fragment页面中,下面是代码。

package com.example.fgb.myFragment;import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;import com.example.fgb.R;/*** A placeholder fragment containing a simple view.*/
public class FragmentA extends Fragment {private String tag="A";public FragmentA() {}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {Log.d(tag,"onCreateView");return inflater.inflate(R.layout.fragment_a, container, false);}@Overridepublic void onCreate(Bundle savedInstanceState) {Log.d(tag,"onCreate");super.onCreate(savedInstanceState);}@Overridepublic void onAttach(Activity activity) {Log.d(tag,"onAttach");super.onAttach(activity);}@Overridepublic void onActivityCreated(Bundle savedInstanceState) {Log.d(tag,"onActivityCreated");super.onActivityCreated(savedInstanceState);}@Overridepublic void onStart() {Log.d(tag,"onStart");super.onStart();}@Overridepublic void onResume() {Log.d(tag,"onResume");super.onResume();}public void onPause() {Log.d(tag,"onPause");super.onPause();}@Overridepublic void onStop() {Log.d(tag,"onStop");super.onStop();}@Overridepublic void onDestroyView() {Log.d(tag,"onDestroyView");super.onDestroyView();}@Overridepublic void onDestroy() {Log.d(tag,"onDestroy");super.onDestroy();}@Overridepublic void onDetach() {Log.d(tag,"onDetach");super.onDetach();}
}

着是其中一个。其他的类似。xml文件如下。

<FrameLayout 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" tools:context="com.example.fgb.myFragment.FragmentB"><!-- TODO: Update blank fragment layout --><TextView android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="我是A页面"android:layout_gravity="center" /></FrameLayout>

他只是一个简单的fragment的使用而已。
这样,一切就昨晚了。
最后说以下他的运行机制。我在网上找了很久,很少看见讲这个的
首先,我们进入mainactivity后,加载Viewpaper,通过适配器倒入所有的fragment。viewpaper加载一个fragment时,通过fragment的onCreateView得到fragment的视图,加载进入适配器,而适配器通过getVIEW将视图返回给viewpaper。其他的一样,只不过每个fragment对象都实现加载进入了适配器,而视图时在viewpaper切换,调用的时候才加载创建。通过下面的imageview 设置点击监听达到导航的效果。
总结说来,还是viewpaper的适用而已。


果然马这么多字心情好了一点。
以下是无聊的吐槽,将来回头复习可跳过。


这几天没到周一网上老是睡不着,可能是周么生理周期又高混乱了,半夜搞得老是睡不着,也可能是这段时间不开心
说起我不开心,着已经是很长时间了,这几年都过得不开心,那年高考过后,伴随失恋的痛苦,接踪而至的是对人生的迷茫。以前的时候,以为自己对人家的心思会明白,但是结果证明,所有的一切都只是自己的幻想。有时候觉得自己的兄弟喜欢他,如果他们能成为一对,自己就算牺牲了一些。那也没什么了,最起码你看上的人我信得过,交给他我很放心,但是,你们没成,真是让我后悔,为什么我没追,为什么我要想着让你选。以前飞龙说,不管这么样,不要让自己最后回想起来后悔,所以最后我才会说让我照顾你,但是你拒绝了,那我也能安慰自己,我曾经尝试过。我没失败,只是没成功。
后来我们没有了联系。
那段时间自己沉迷游戏,每天吃了睡,睡了吃,养成了许多坏习惯。挂科。丧失自信。本来以为大学混混就过去了,没想到连混混都不行。居然说自己连毕业证书都有可能拿不到。人生真是可笑。
那年错过火车,不知道是幸运还是不幸,居然在他的帮组下见到了你。当时我身上没钱,电脑刚被投。但是人很开心。可惜时不我待,物是人非。我们都不是以前的自己。索性放下一切,重头开始
我开始尝试改掉自己的坏习惯,尝试在努力学习,尝试建立自己的自信心。最重要的是尝试让自己开心的过日子。多少我也能明白,其实对你而言,我并不重要,大概就是人生路上的一个过客吧。也许你也试着去挽留,也许我也试着让自己再次相信你,很可惜的是,在我决定放弃你的那一颗,我们就没有机会了。我常常安慰自己,是我放弃了你,二不是你放弃了我。但其实,很有可能我对你就没有那么重要。那次我见到你,我也能发现,没有我你也能过得很好,但是为什么我不行呢?
为什么我要在意你,所以我也要变得开心,变得比以前好,这样想很对。人生很长,我不能老是活在过去。
今年我大三,日子还是一塌糊涂。改重修的科目还是没过去,索性随他而去。老爸也年老了,自己要寻求自立。我一天天长大,他也一天天变老,老爸虽然口上不说,但其实我知道,对他来说,其实我一直都让他觉得很骄傲。只是要是没有拿到毕业证书,会让他很失望。所以毕业证书上,也不能放弃。哪怕最后没有成功,也要试着尽力。
飞龙说的很对,至少要让自己在以后回忆起来,能够拍着胸脯对自己说,当年我尝试过,不至于太后悔,我在one上看到过,屌丝的三成境界,
一是不以自己为中心。那次失恋是我对人生最大的思考,不敢说自己明白,但也知道自己不是世界的中心。二是知道做了没有效果,所以放弃。
三是明知道没有效果,仍然去做。人生这么长,如果一次失败就让我否定了自己,那连我自己都瞧不起自己了。人生那么短,只是想混混而已那又何必去做。也许我真的没有毕业证书了,也许我的人生也失去她了,但是让我现在放弃的话,那真的安于做一个屌丝了

android(4) 使用ViewPaper 以及这几年来的一些感悟相关推荐

  1. Android发展趋势分析,droidcon北京2017安卓技术大会参会感悟

    作者简介: 张航,2003年武汉大学计算机专业硕士毕业,先后任职于NEC.IBM等企业,2008年加入中科创达以来,一直致力于嵌入式系统尤其是Android系统的研发工作,2015年开始担任智能汽车事 ...

  2. Android模仿QQ的左右滑动切换界面和下拉更新的效果

    转自http://www.linuxidc.com/Linux/2012-08/67207.htm 主布局main.xml <?xml version="1.0" encod ...

  3. android studio 安装问题,解决Android Studio的安装问题

    今天开始了android studio的下载与安装,我再官网上下载了Android studio,下载不难,运行出来可需要一定的时间,在中途中我遇到了一些问题 一:Build错误: 在我最开始下载完A ...

  4. 这篇专门推荐给学 Android 的同学,建议收藏!

    code小生 一个专注大前端领域的技术平台公众号回复Android加入安卓技术群 按照惯例,是每年都会有年度总结文章的,2019也不例外. code小生 以下内容按照技术模块来划分,每个大的分类下文章 ...

  5. 2019 年终总结,245+篇,已分类整理

    code小生 一个专注大前端领域的技术平台公众号回复Android加入安卓技术群 按照惯例,是每年都会有年度总结文章的,2019也不例外. code小生 以下内容按照技术模块来划分,每个大的分类下文章 ...

  6. 20172321 2017-2018-2 《程序设计与数据结构》第11周学习总结

    20172321 2017-2018-2 <程序设计与数据结构>第11周学习总结 教材学习内容总结 第23章 1.Java是开发Android应用程序的默认语言,但Android应用程序不 ...

  7. android顶部导航高度,Android特效——————底部/顶部导航条(Fragment+ViewPaper+XTabLayout)...

    初次使用xtablayout和viewpaper2.所以就弄了最基础的导航条 一.效果 二.代码 配置环境[在bulid.gradle中添加以下代码] implementation 'androidx ...

  8. Android开发——内存优化 图片处理

    8.  用缓存避免内存泄漏 很常见的一个例子就是图片的三级缓存结构,分别为网络缓存,本地缓存以及内存缓存.在内存缓存逻辑类中,通常会定义这样的集合类. [java] view plaincopy  p ...

  9. 【腾讯Bugly干货分享】Android ListView与RecyclerView对比浅析--缓存机制

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5811d... 作者:黄宁源 一,背景 RecyclerView是谷歌官方出的一 ...

最新文章

  1. vs 插件小番茄 visual assist x破解版 破解教程下载
  2. HDU 6015 Skip the Class
  3. Xamarin Visual Studio不识别JDK路径
  4. ubuntu16.04 cuda8.0 caffe 编译 error: cublas_v2.h 没有那个文件或目录
  5. Opengl-光照-基本光照-材质(有了材质一个物体才算是完整了)
  6. mac下载安装本地mongodb
  7. 关于dllimport的使用
  8. CentOS 桌面启动无登录界面
  9. Ubuntu16.04下制作deb包的方法详解
  10. 神经网络和深度学习简史(全)
  11. 机器人学-笔记-斯坦福大学公开课-class 1
  12. eclipse不自动弹出提示(alt+/快捷键失效)
  13. 中职计算机应用综合试题精选,2015中职计算机应用专业全真模拟试卷(一).doc...
  14. 虚拟机连接安卓模拟器(雷电模拟器、夜神模拟器)
  15. [1.24] T3-人品问题
  16. 耗时十年!精心整理的Java高级开发需要的分布式技术
  17. Altium Designer,PCB处理最后GND以及铺铜经验
  18. 实现一个app的签到功能,没你想的那么复杂!
  19. 计算机网络速成课【体系结构】
  20. JavaSE 学Java语言的前情概要

热门文章

  1. 【编程基础の基础】“#define _GNU_SOURCE“或是在编译时“-D _GNU_SOURCE“代表了什么?有什么用
  2. python输入一组数字求平均值和标准差_如何计算PySpark DataFrame的平均值和标准差?...
  3. mybatis parametertype可以不填么
  4. Cantor三分集的递归算法
  5. 使用范例调教ChatGPT
  6. 电脑usb驱动卸载了怎么办?
  7. mac vscode latex 中文乱码 怎么解决
  8. 在Win10家庭中文版系统安装Hyper-V
  9. java ice c_ZeroC ICE之旅------java
  10. 048 《20-30岁,我拿十年做什么》小感