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 186 187 188 189 190 191 192 193 194 195 196 197 198
| public abstract class BaseFragment extends Fragment implements View.OnClickListener { private LoadingDialog dialog; private Handler handler = new Handler(); private long lastClickTime;
@Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); }
@Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { int layoutResId = getLayoutResId(); if (layoutResId <= 0) { return super.onCreateView(inflater, container, savedInstanceState); } View view = inflater.inflate(layoutResId, container, false); onCreateView(); return view; }
@Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); onInitView(savedInstanceState, getActivity().getIntent()); onInitViewModel(); }
@Override public void onClick(View v) { onClick(v, v.getId()); }
/** * 通过 id 查询当前布局的 View 控件。 * * @param id 控件 id * @param <T> 控件类型 * @return 返回对应的控件 */ public <T extends View> T findView(int id) { return findView(id, false); }
/** * 通过 id 查询当前布局的 View 控件。并是否对此控件设置点击监听 * * @param id 控件 id * @param isClick 是否设置点击点击监听 * @param <T> 控件类型 * @return 返回对应的控件 */ public <T extends View> T findView(int id, boolean isClick) { View viewById = getView().findViewById(id); if (isClick) { viewById.setOnClickListener(this); } return (T) viewById; }
/** * 通过 id 查询当前布局的 View 控件。并是否对此控件设置点击监听 * * @param view 当前的布局 * @param id 控件 id * @param isClick 是否设置点击点击监听 * @param <T> 控件类型 * @return 返回对应的控件 */ public <T extends View> T findView(View view, int id, boolean isClick) { View viewById = view.findViewById(id); if (isClick) { viewById.setOnClickListener(this); } return (T) viewById; }
public void showToast(String text) { //toast ToastUtils.showToast(text); }
public void showToast(int resId) { showToast(getString(resId)); }
/** * 设置布局资源id * * @return 设置布局资源id */ protected abstract int getLayoutResId(); /** * 初始化 view * * @param savedInstanceState * @param intent */ protected abstract void onInitView(Bundle savedInstanceState, Intent intent);
/** * 点击监听,当通过{@link #findView(int, boolean)} 方法, 当设置为true , 设置点击监听时, 则会通过此 * 方法进行监听回调。 * * @param v 监听的 view 控件 * @param id 控件的 ID */ protected void onClick(View v, int id) { } protected void onInitViewModel() { }
/** * 为防止多次重复点击 * * @return false */ public synchronized boolean isFastClick() { long time = System.currentTimeMillis(); if (time - lastClickTime < 500) { return true; } lastClickTime = time; return false; }
private long dialogCreateTime; /** * 显示加载 dialog * * @param msg */ public void showLoadingDialog(String msg) { FragmentManager fragmentManager = getFragmentManager(); if (fragmentManager == null) { return; } if (dialog == null || (dialog.getDialog() != null && !dialog.getDialog().isShowing())) { dialogCreateTime = System.currentTimeMillis(); dialog = new LoadingDialog(); dialog.setLoadingInformation(msg); dialog.show(fragmentManager, "loading_dialog"); } }
/** * 显示加载 dialog */ public void showLoadingDialog(int msgResId) { showLoadingDialog(getString(msgResId)); }
/** * 取消加载dialog */ public void dismissLoadingDialog() { dismissLoadingDialog(null); }
/** * 取消加载dialog. 因为延迟, 所以要延时完成之后, 再在 runnable 中执行逻辑. * <p> * 延迟关闭时间是因为接口有时返回太快。 */ public void dismissLoadingDialog(final Runnable runnable) { if (dialog != null && dialog.getDialog() != null && dialog.getDialog().isShowing()) { // 由于可能请求接口太快,则导致加载页面一闪问题, 所有再次做判断, // 如果时间太快(小于 500ms), 则会延时 1s,再做关闭。 if (System.currentTimeMillis() - dialogCreateTime < 10) { handler.postDelayed(new Runnable() { @Override public void run() { if (runnable != null) { runnable.run(); } if (dialog != null) { dialog.dismissAllowingStateLoss(); dialog = null; } } }, 1000);
} else { dialog.dismiss(); dialog = null; if (runnable != null) { runnable.run(); } } } }
public void onCreateView() { }
}
|