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

来源:互联网 发布:西城区2016年经济数据 编辑:程序博客网 时间:2024/05/30 07:13

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

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;//继承fragmentActivitypublic class MainActivity extends FragmentActivity implements View.OnClickListener{    private ViewPager viewPager;//重要组件    private List<Fragment> list;    private FragmentManager fragmentManager;    private myAdapter adapter;    @Override    protected 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());    }    @Override    public 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;        }        @Override        public Fragment getItem(int i) {            return listl.get(i);        }        @Override        public 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() {    }    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,                             Bundle savedInstanceState) {        Log.d(tag,"onCreateView");        return inflater.inflate(R.layout.fragment_a, container, false);    }    @Override    public void onCreate(Bundle savedInstanceState) {        Log.d(tag,"onCreate");        super.onCreate(savedInstanceState);    }    @Override    public void onAttach(Activity activity) {        Log.d(tag,"onAttach");        super.onAttach(activity);    }    @Override    public void onActivityCreated(Bundle savedInstanceState) {        Log.d(tag,"onActivityCreated");        super.onActivityCreated(savedInstanceState);    }    @Override    public void onStart() {        Log.d(tag,"onStart");        super.onStart();    }    @Override    public void onResume() {        Log.d(tag,"onResume");        super.onResume();    }    public void onPause() {        Log.d(tag,"onPause");        super.onPause();    }    @Override    public void onStop() {        Log.d(tag,"onStop");        super.onStop();    }    @Override    public void onDestroyView() {        Log.d(tag,"onDestroyView");        super.onDestroyView();    }    @Override    public void onDestroy() {        Log.d(tag,"onDestroy");        super.onDestroy();    }    @Override    public 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上看到过,屌丝的三成境界,
一是不以自己为中心。那次失恋是我对人生最大的思考,不敢说自己明白,但也知道自己不是世界的中心。二是知道做了没有效果,所以放弃。
三是明知道没有效果,仍然去做。人生这么长,如果一次失败就让我否定了自己,那连我自己都瞧不起自己了。人生那么短,只是想混混而已那又何必去做。也许我真的没有毕业证书了,也许我的人生也失去她了,但是让我现在放弃的话,那真的安于做一个屌丝了

1 0
原创粉丝点击