一、基类简介:
关于基类的简单介绍:
- 基类就是父类,派生类就是子类,你可以理解为生活中的父子关系,
- 也就是说儿子继承了所有的父亲的样貌特征,但是儿子也有父亲所没有的一些特点
- 专业点讲,就是子类可以继承并使用父类的属性和方法,也可以有自己的属性和方法!
二、基类的使用:
自定义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() {
//创建设置适配器
}
}
最近才开始更新代码,如果喜欢就关注一下吧!往后还会有更多更新哦!
谢谢各位了!