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

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

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 list;
    private FragmentManager fragmentManager;
    private myAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list=new ArrayList();
        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 listl;

        public myAdapter(FragmentManager fm) {
            super(fm);
        }

        public myAdapter(FragmentManager fm,List 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 中的用法


<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">

    
    <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开发)