import
android.view.LayoutInflater;
import
android.view.View;
import
android.view.ViewGroup;
import
androidx.annotation.NonNull;
import
androidx.annotation.Nullable;
import
androidx.fragment.app.Fragment;
*
@author
xujiayi
*
@date
2023/11/5
* 我只是个自由的主!
public
abstract
class
BaseFragment
extends
Fragment
{
public
static
final
String TAG =
"BaseFragment"
;
* 视图是否初始化
protected
boolean
isInit =
false
;
protected
boolean
isLoad =
false
;
private
View mView;
@Nullable
@Override
public
View
onCreateView
(
@NonNull
LayoutInflater inflater,
@Nullable
ViewGroup container,
@Nullable
Bundle savedInstanceState)
{
mView = onSubViewLoaded(inflater, container);
isInit =
true
;
isCanLoadData();
return
mView;
* 是否可以加载数据
* 可以加载数据的条件:
* 1.视图已经初始化
* 2.视图对用户可见
private
void
isCanLoadData
()
{
if
(!isInit)
return
;
Log.d(TAG,
"isCanLoadData: "
+getUserVisibleHint());
if
(getUserVisibleHint()&&!isLoad) {
lazyLoadData();
isLoad =
true
;
}
else
{
if
(isLoad) stopLoadData();
public
abstract
View
createSuccess
(LayoutInflater inflater, ViewGroup container)
;
* 当视图初始化并且对用户可见的时候去真正的加载数据
protected
abstract
void
lazyLoadData
()
;
* 当视图已经对用户不可见并且加载过数据,如果需要在切换到其他页面时停止加载数据,可以覆写此方法
protected
void
stopLoadData
()
{
protected
abstract
View
onSubViewLoaded
(LayoutInflater inflater, ViewGroup container)
;
@Override
public
void
onDestroyView
()
{
super
.onDestroyView();
isInit =
false
;
isLoad =
false
;
@Override
public
void
setUserVisibleHint
(
boolean
isVisibleToUser)
{
super
.setUserVisibleHint(isVisibleToUser);
isCanLoadData();
java