DBBaseFragment.java
5.35 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
package com.cnlive.goldenline.ui.base;
import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import com.cnlive.goldenline.R;
/**
* Created by ZJL on 2017/5/14.
*/
public abstract class DBBaseFragment<SV extends ViewDataBinding> extends Fragment {
// 布局view
protected SV bindingView;
// fragment是否显示了
protected boolean mIsVisible = false;
// 加载中
private LinearLayout mLlProgressBar;
// 加载失败
private LinearLayout mRefresh;
// 内容布局
protected RelativeLayout mContainer;
// 动画
private AnimationDrawable mAnimationDrawable;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View ll = inflater.inflate(R.layout.fragment_base, null);
bindingView = DataBindingUtil.inflate(getActivity().getLayoutInflater(), setContent(), null, false);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
bindingView.getRoot().setLayoutParams(params);
mContainer = (RelativeLayout) ll.findViewById(R.id.container);
mContainer.addView(bindingView.getRoot());
return ll;
}
/**
* 在这里实现Fragment数据的缓加载.
*/
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (getUserVisibleHint()) {
mIsVisible = true;
onVisible();
} else {
mIsVisible = false;
onInvisible();
}
}
protected void onInvisible() {
}
/**
* 显示时加载数据,需要这样的使用
* 注意声明 isPrepared,先初始化
* 生命周期会先执行 setUserVisibleHint 再执行onActivityCreated
* 在 onActivityCreated 之后第一次显示加载数据,只加载一次
*/
protected void loadData() {
}
protected void onVisible() {
loadData();
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mLlProgressBar = getView(R.id.ll_progress_bar);
ImageView img = getView(R.id.img_progress);
// 加载动画
mAnimationDrawable = (AnimationDrawable) img.getDrawable();
// 默认进入页面就开启动画
if (!mAnimationDrawable.isRunning()) {
mAnimationDrawable.start();
}
mRefresh = getView(R.id.ll_error_refresh);
// 点击加载失败布局
mRefresh.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showLoading();
onRefresh();
}
});
bindingView.getRoot().setVisibility(View.GONE);
}
protected <T extends View> T getView(int id) {
return (T) getView().findViewById(id);
}
/**
* 布局
*/
public abstract int setContent();
/**
* 加载失败后点击后的操作
*/
protected void onRefresh() {
}
/**
* 显示加载中状态
*/
protected void showLoading() {
if (mLlProgressBar.getVisibility() != View.VISIBLE) {
mLlProgressBar.setVisibility(View.VISIBLE);
}
// 开始动画
if (!mAnimationDrawable.isRunning()) {
mAnimationDrawable.start();
}
if (bindingView.getRoot().getVisibility() != View.GONE) {
bindingView.getRoot().setVisibility(View.GONE);
}
if (mRefresh.getVisibility() != View.GONE) {
mRefresh.setVisibility(View.GONE);
}
}
/**
* 加载完成的状态
*/
protected void showContentView() {
if (mLlProgressBar.getVisibility() != View.GONE) {
mLlProgressBar.setVisibility(View.GONE);
}
// 停止动画
if (mAnimationDrawable.isRunning()) {
mAnimationDrawable.stop();
}
if (mRefresh.getVisibility() != View.GONE) {
mRefresh.setVisibility(View.GONE);
}
if (bindingView.getRoot().getVisibility() != View.VISIBLE) {
bindingView.getRoot().setVisibility(View.VISIBLE);
}
}
/**
* 加载失败点击重新加载的状态
*/
protected void showError() {
if (mLlProgressBar.getVisibility() != View.GONE) {
mLlProgressBar.setVisibility(View.GONE);
}
// 停止动画
if (mAnimationDrawable.isRunning()) {
mAnimationDrawable.stop();
}
if (mRefresh.getVisibility() != View.VISIBLE) {
mRefresh.setVisibility(View.VISIBLE);
}
if (bindingView.getRoot().getVisibility() != View.GONE) {
bindingView.getRoot().setVisibility(View.GONE);
}
}
@Override
public void onDestroy() {
super.onDestroy();
}
public void removeSubscription() {
}
}