Android studio 基类的简介与使用(自定义Activity与自定义Fragment)

一、基类简介:

	关于基类的简单介绍:
  • 基类就是父类,派生类就是子类,你可以理解为生活中的父子关系,
  • 也就是说儿子继承了所有的父亲的样貌特征,但是儿子也有父亲所没有的一些特点
  • 专业点讲,就是子类可以继承并使用父类的属性和方法,也可以有自己的属性和方法!

二、基类的使用:

自定义Activity

1、首先需要创建一个项目,然后创建BeasActivity继承AppCompatActivity,重写onCreate方法,就相当于手写了一个Activity,详细请看下面代码

BeasActivity.class

package bawey.com.day14.beas;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;

import bawey.com.day14.R;

/**
 * 这里是自定义activity
 */

public abstract class BeasActivity extends AppCompatActivity {

    //用受保护的(protected)onCreate方法,因为在里面定义的方法需要重写
    //当一个类(子类)继承BeasActivity时需要重写onCreate里面的方法
    
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //在这里面可以定义自己需要的方法了,定义的方法可以在子类里面实现,这就是基类,自定义Activity

        //填充布局,填充主方法的布局,可以创建方法在子类里获取布局,也可以直接在本类获取布局
        //setContentView(layoutResID());  //创建方法在子类里获取布局
        setContentView(R.layout.activity_main);  //直接在本类获取布局

        //以下是自己定义的方法,自己可以随便定义方法

        //获取并初始化视图或控件
        initView();

        //请求数据或获取数据
        initData();

        //创建并设置适配器
        initAdapter();

        //--------------------------------------------------------------------------------
        //其实要实现的逻辑代码都可以在本类里面实现,也可以在子类里面实现,一切都看自己的喜好
        //我这是在子类里面实现

        //+++++++++++++++++++++++++++++++++
        /**
         * 重点注意:
         *
         *  如果想在子类里面实现需要把本类加上抽象方法
         *  如果在本类实现就不用了
         */

    }

    //public abstract int layoutResID();

    protected abstract void initView(); //定义获取视图方法,需重新

    protected abstract void initData();  //定义获取请求获取数据方法,需重新

    protected abstract void initAdapter();  //定义创建设置适配器方法,需重新









    //基类可以重新activity所以生命周期,下面几个生命周期可以随便看看

    @Override
    protected void onStart() {
        super.onStart();
        //可以看到页面但没有焦点

    }

    @Override
    protected void onResume() {
        super.onResume();
        //获取焦点时调用方法

    }

    @Override
    protected void onPause() {
        super.onPause();
        //失去焦点时,页面消失调用方法,就相当于点击Home键后调用方法

    }

    @Override
    protected void onRestart() {
        super.onRestart();
        //activity重启或点了Home键后又重新进入activity时调用的方法

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //activity被销毁时调用的方法
    }
}

2、父类(BeasActivity)写完接下来可以由子类继承父类重写父类的方法,可以用MainActivity当子类,也可以自己创建一个子类,不过在用MainActivity的时候需要把里面的onCreate删了,代码如下:

MainActivity.class

package bawey.com.day14.activity;


import bawey.com.day14.beas.BeasActivity;

/**
 * 继承父类(BeasActivity)(自定义Activity),重写父类方法
 */
public class MainActivity extends BeasActivity {


    /*@Override
    public int layoutResID() {
        //直接返回主布局
        return R.layout.activity_main;
    }*/

    //一下方法可以操作逻辑代码

    @Override
    protected void initView() {
        //这里可以获取并初始化主布局里面的视图或布局

    }

    @Override
    protected void initData() {
        //这里可以请求网络数据等等
        //也可以在这调用自己封装请求网络数据的工具类

    }

    @Override
    protected void initAdapter() {
        //可以在这创建适配器,设置适配器

    }
}

自定义Fragment:

这个地方就有用到Fragment的懒加载实现了。

什么是懒加载呢!在Android应用中,ViewPager是我们不可避免使用的一个控件,因为它可以使我们在占用较少空间的同时,增强内容的丰富性,它几乎成了每一个App的标配控件。但是,假如ViewPager的每一个Fragment都需要通过网络拉取数据加载,而ViewPager是默认加载前两项的,所以在很容易造成网络丢包或者网络堵塞等问题,所以Fragment使用懒加载是非常有必要的。

要想实现懒加载就要用上setUserVisibleHint这个方法,而且这个方法是优于onCreate()方法的,所以也可以作为Fragment的一个生命周期来看待,它会通过isVisibleToUser告诉我们当前Fragment我们是否可见,我们可以在可见的时候再进行网络加载。

ChildFragment.class

package bawey.com.day14.frament;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import bawey.com.day14.R;
import bawey.com.day14.beas.BeasFragment;

/**
 *
 */
public class ChildFragment extends BeasFragment {

    private View view;

    @Override
    protected View createView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        //可以获取fragment布局
        view = inflater.inflate(R.layout.×××, container, false);

        return view;
    }

    @Override
    protected void initView() {
        //初始化控件

    }

    @Override
    protected void initData() {
        //请求网络数据

    }

    @Override
    protected void initAdapter() {
        //创建设置适配器

    }
}

最近才开始更新代码,如果喜欢就关注一下吧!往后还会有更多更新哦!
谢谢各位了!

猜你喜欢

转载自blog.csdn.net/qq_42545144/article/details/86303568
今日推荐