day12 Fragment day13向导页

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定义方法接受数据

/**
 * 如何实现微信切换
 * 1.activity布局:FrameLayout(放fragment容器)
 * 2.创建fragment类:自定义类继承Fragment 重写onCreateView方法 加载布局
 * 3.点击按钮切换
 getSupportFragmentManager().beginTransaction().replace(R.id.frame,fragment1).commit();
 *
 * */

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    RadioButton radioButton1,radioButton2,radioButton3;
    Myframe1 myframe1;
    Myframe2 myframe2;
    Myframe3 myframe3;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        radioButton1=findViewById(R.id.rb1);
        radioButton2=findViewById(R.id.rb2);
        radioButton3=findViewById(R.id.rb3);
        myframe1=new Myframe1();
        myframe2=new Myframe2();
        myframe3=new Myframe3();
        radioButton1.setOnClickListener(this);
        radioButton2.setOnClickListener(this);
        radioButton3.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.rb1:
                //获得Fragment管理者
                FragmentManager supportFragmentManager = getSupportFragmentManager();
                //开启事务
                FragmentTransaction transaction = supportFragmentManager.beginTransaction();
                //操作
                transaction.replace(R.id.frame,myframe1);//参数一 fragmelaypout容器
                //提交
                transaction.addToBackStack("shouye");
                transaction.commit();

                break;
            case R.id.rb2:
                getSupportFragmentManager().beginTransaction().replace(R.id.frame,myframe2).addToBackStack("message").commit();

                break;
            case R.id.rb3:
                getSupportFragmentManager().beginTransaction().replace(R.id.frame,myframe3).addToBackStack("my").commit();
                break;
        }
    }


}

public class Myframe1 extends Fragment {
    Button button,button1;


    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.frame1_layout,null);
        button=view.findViewById(R.id.btn);
        button1=view.findViewById(R.id.btn2);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Message message = Message.obtain();
                message.what=1000;
                message.obj="来咯来咯他们真的来咯";
                Myframe3.handler.sendMessage(message);
            }
        });
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EventBus.getDefault().postSticky("爱情有时很残忍");
            }
        });
        return view;
    }
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
    }

    @Override
    public void onStart() {
        super.onStart();
    }

    @Override
    public void onResume() {
        super.onResume();
    }

    @Override
    public void onPause() {
        super.onPause();
    }

    @Override
    public void onStop() {
        super.onStop();
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    @Override
    public void onDetach() {
        super.onDetach();
    }
}

public class Myframe2 extends Fragment {
    TextView textView;
    String string;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.frame2_layout,null);
        textView=view.findViewById(R.id.tv1);
        textView.setText(string);
        EventBus.getDefault().register(this);
        return view;
    }
    @Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
    public void back(String message){
        string=message;
        EventBus.getDefault().removeAllStickyEvents();
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        EventBus.getDefault().unregister(this);
    }
}

public class Myframe3 extends Fragment {

    public static Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what==1000){
                s=(String) msg.obj;
            }
        }
    };
    static String s;
    static TextView textView;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.frame3_layout,null);
        textView=view.findViewById(R.id.tv);
        textView.setText(s);
        return view;
    }
}

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 中的页面

public class MainActivity extends AppCompatActivity {
    RadioButton radioButton1,radioButton2,radioButton3;
    ViewPager viewPager;
    TextView textView;
    ArrayList<View> arrayList=new ArrayList<>();
    MyPager myPager;
    int count =0;
    Timer timer;
    Timer timer2;
    int daojishi=10;
    @SuppressLint("HandlerLeak")
    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (msg.what==101){
                //如果是最后一页,直接取消定时器
                if (count==arrayList.size()){
                    timer.cancel();
                }
                viewPager.setCurrentItem(count++);
            }else if (msg.what==102){
                textView.setText("倒计时:"+daojishi--);
                if (daojishi==0){
                    Toast.makeText(MainActivity.this, "走你", Toast.LENGTH_SHORT).show();
                    timer2.cancel();
                }
            }
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        viewPager=findViewById(R.id.pager);
        radioButton1=findViewById(R.id.rb1);
        radioButton2=findViewById(R.id.rb2);
        radioButton3=findViewById(R.id.rb3);
        textView=findViewById(R.id.tv);
        ImageView imageView = new ImageView(this);
        imageView.setImageResource(R.drawable.b);
        arrayList.add(imageView);
        ImageView imageView1 = new ImageView(this);
        imageView1.setImageResource(R.drawable.a);
        arrayList.add(imageView1);
        ImageView imageView2 = new ImageView(this);
        imageView2.setImageResource(R.drawable.c);
        arrayList.add(imageView2);
        myPager=new MyPager(arrayList);
        myPager.notifyDataSetChanged();
        viewPager.setAdapter(myPager);

        timer=new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                handler.sendEmptyMessage(101);//发送一个空的消息
            }
        },0,1000);

        timer2=new Timer();
        timer2.schedule(new TimerTask() {
            @Override
            public void run() {
                handler.sendEmptyMessage(102);//发送一个空的消息
            }
        },0,1000);
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            //滑动前
            @Override
            public void onPageScrolled(int i, float v, int i1) {
            }
            //滑动后
            @Override
            public void onPageSelected(int i) {
                if (i==0){
                    radioButton1.setChecked(true);
                }else if (i==1){
                    radioButton2.setChecked(true);
                }else if (i==2){
                    radioButton3.setChecked(true);
                }
            }
            //滑动状态
            @Override
            public void onPageScrollStateChanged(int i) {
            }
        });


    }
}

public class MyPager extends PagerAdapter {
    ArrayList<View> arrayList;

    public MyPager(ArrayList<View> arrayList) {
        this.arrayList = arrayList;
    }

    @Override
    public int getCount() {
        return arrayList.size();
    }

    @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(arrayList.get(position));
        return arrayList.get(position);
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {

        container.removeView(arrayList.get(position));
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值