Fragment

本文介绍了Fragment的相关知识,包括其含义、实现步骤(创建与显示)、生命周期、回退栈及传值方法。还提到了ViewPager,它继承于ViewGroup,常与Fragment一起使用,具有自动轮播等特点,并给出了使用思路及适配器需重写的方法。

Fragment
Fragment,英文碎片的意思,早期应用在平板设计中
如何实现Fragment
步骤1:创建Fragment对象:(右击新建Fragment一步搞定)
(1).定义一个类, 继承Fragment
(2).重写父类的方法onCreateView()
(3).在onCreateView()方法中, 为Fragment 创建UI界面
步骤2:显示Fragment
(1)静态显示 Fragment – 布局页面中直接写
a.在Activity 对应的页面中, 通过标签 引入
b.在标签中, 必须要指定id属性, 用来标识Fragment 的唯一性 c.在标签中,必须要有name属性, 用来标识当前显示那个Fragment
(2)动态显示 Fragment — 在Activity.java 代码中显示
a.在Activity 对应的页面中, 需要通过布局容器占位
b.在Activity 代码中得到Fragment 管理器对象
c.得到Fragment 事务管理 添加、移除、显示、隐藏、替换Fragment 提交事务
四.Fragment的生命周期
1.onAttach() :Fragment与Activity有联系。
2.onCreate():创建Fragment
3.onCreateView():创建Fragment视图,尽量不要做耗时操作
4.onActivityCreated():当Activity中的onCreate方法执行完后调用。
5.onStart():启动。
6.onResume():可见
7.onPause():不可见
8.onStop():停止。
9. onDestroyView() :销毁Fragment视图
10.onDestroy():销毁fragment对象
11.onDetach():Fragment和Activity解除关联的时候调用
Fragment的回退栈
Fragment2 f2 = new Fragment2();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction tx = fm.beginTransaction();
tx.replace(R.id.fl, f2);
//将当前的事务添加到了回退栈
tx.addToBackStack(null);
tx.commit();
Fragment之间的传值:使用EventBus
举例:fragment1页面有一个编辑框,fragment2页面有一个按钮和一个编辑框,当点击按钮的时候,向fragment1发送数据并展现在fragment1中。
发送方:fragment2
EventBus.getDefault().post(数据);
接受方:fragment1
onCreate :注册
onDestory:解除注册
@subscribe定义方法接受数据

package com.example.homework6_20_2;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.RadioButton;
import android.widget.RadioGroup;

public class MainActivity extends AppCompatActivity {
    RadioGroup rg;
    RadioButton rb1;
    RadioButton rb2;
    RadioButton rb3;
    RadioButton rb4;
    RadioButton rb5;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rb1 = findViewById(R.id.rbt1);
        rb2 = findViewById(R.id.rbt2);
        rb3 = findViewById(R.id.rbt3);
        rb4 = findViewById(R.id.rbt4);
        rb5 = findViewById(R.id.rbt5);
        rg = findViewById(R.id.rg);
        final Home_fragment home_fragment = new Home_fragment();
        final Car_Fragment car_fragment = new Car_Fragment();
        final My my = new My();
        rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId){
                    case R.id.rbt1:
                        getSupportFragmentManager().beginTransaction().replace(R.id.fragment,home_fragment).addToBackStack("home_fragment").commit();
                        break;
                    case R.id.rbt4:
                        getSupportFragmentManager().beginTransaction().replace(R.id.fragment,car_fragment).addToBackStack("car_fragment").commit();
                        break;
                    case R.id.rbt5:
                        getSupportFragmentManager().beginTransaction().replace(R.id.fragment,my).addToBackStack("my").commit();
                        break;
                }
            }
        });
    }
}

ViewPager
android.support.v4.view.ViewPager
特点:
继承于ViewGroup, 是一个容器, 添加一系列的View
数据填充需要通过PagerAdapter(向导页)
ViewPager 通常和Fragment一起使用FragmentPagerAdapter(底部导航栏)
.自动轮播
2.滑动小圆点跟着走
3.最后一页显示立即体验按钮
4.最后一页,右上角倒计时
5.第一次打开有向导页,当第2次打开没有向导页,直接是首页
三.思路:1个ViewPager+4个View+1个PagerAdapter
1.容器:ViewPager------>Listview
2.数据:ArrayList<View.
3.适配器:PagerAdapter-------->BaseAdapter
重写的方法:
(1)getCount():返回数据源的总数量
(2)isViewFromObject() 判断当前显示的View 和instantiateItem() 返回的页面是否一致
(3)instantiateItem() 根据下标, 创建ViewPager中显示的页面
(4)destroyItem() 根据下标, 移除ViewPager 中的页面

package com.example.day13_viewpager;

import android.annotation.SuppressLint;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {
    @SuppressLint("HandlerLeak")
    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what == 101){
                vp.setCurrentItem(current_item++);
            }else if (msg.what == 102){
                textView.setText("倒计时:"+(time++));
            }
        }
    };
    private int current_item = 0;//默认显示页
    private int time = 0;//默认显示页
    ViewPager vp;
    My_Adapter my_adapter;
    ArrayList<View> list = new ArrayList<>();
    RadioButton rb1;
    RadioButton rb2;
    RadioButton rb3;
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        vp = findViewById(R.id.vp);
        rb1 = findViewById(R.id.rb1);
        rb2 = findViewById(R.id.rb2);
        rb3 = findViewById(R.id.rb3);
        textView = findViewById(R.id.text);
        ImageView a = new ImageView(this);
        a.setImageResource(R.mipmap.a);
        list.add(a);
        ImageView b = new ImageView(this);
        b.setImageResource(R.mipmap.b);
        list.add(b);
        ImageView c = new ImageView(this);
        c.setImageResource(R.mipmap.c);
        list.add(c);
        my_adapter = new My_Adapter(list);
        vp.setAdapter(my_adapter);
        //倒计时
        final Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                   if (current_item != list.size()){
                       handler.sendEmptyMessage(101);
                   }else {
                       timer.cancel();
                   }
            }
        },0,1000);
        final Timer timer2 = new Timer();
        timer2.schedule(new TimerTask() {
            @Override
            public void run() {
                if (time < 5){
                    handler.sendEmptyMessage(102);
                }else {
                    timer.cancel();
                }
            }
        },0,1000);
        vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int i, float v, int i1) {

            }

            @Override
            public void onPageSelected(int i) {
                    if (i == 0){
                        rb1.setChecked(true);
                    }else if (i == 1){
                        rb2.setChecked(true);
                    }else {
                        rb3.setChecked(true);
                    }
            }

            @Override
            public void onPageScrollStateChanged(int i) {

            }
        });
    }
}

package com.example.day13_viewpager;

import android.support.annotation.NonNull;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;

import java.util.ArrayList;


public class My_Adapter extends PagerAdapter {
    ArrayList<View> list;
    @Override
    public int getCount() {
        return list.size();
    }

    public My_Adapter(ArrayList<View> list) {
        this.list = list;
    }

    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
        return view == o;
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        container.addView(list.get(position));
        return  list.get(position);
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        container.removeView(list.get(position));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MX_XXS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值