您的位置:首页 > 移动开发 > Android开发

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

2015-08-17 04:18 579 查看
既然是技术博客,虽然不求又多少人看,但还是先上代码吧,后面的内容是题外话。

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;
@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上看到过,屌丝的三成境界,

一是不以自己为中心。那次失恋是我对人生最大的思考,不敢说自己明白,但也知道自己不是世界的中心。二是知道做了没有效果,所以放弃。

三是明知道没有效果,仍然去做。人生这么长,如果一次失败就让我否定了自己,那连我自己都瞧不起自己了。人生那么短,只是想混混而已那又何必去做。也许我真的没有毕业证书了,也许我的人生也失去她了,但是让我现在放弃的话,那真的安于做一个屌丝了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 杂想