JKBaseLib/BaseLibrary/src/main/java/com/tfq/library/base/BaseFragment.java

178 lines
5.6 KiB
Java
Raw Normal View History

2025-06-30 13:49:41 +08:00
package com.tfq.library.base;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.hjq.permissions.OnPermissionCallback;
import com.hjq.permissions.XXPermissions;
import com.tfq.library.utils.PermissionDialog;
import java.util.List;
import androidx.annotation.LayoutRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
/**
* Created by JiangKe on 2025/02/20.
*/
public abstract class BaseFragment extends Fragment {
private View root = null;
private String content = "当前操作需要您授权相应权限,否则可能无法正常使用此功能";
@LayoutRes
protected abstract int getLayoutId();
/**
* 初始化零件
*/
protected abstract void initView();
protected abstract void initData(Bundle savedInstanceState);
/**
* 初始化点击事件
*/
protected void initClick() {
}
/**
* 逻辑使用区
*/
protected void processLogic() {
}
/**
* 权限请求
*/
protected void requestPermission(String[] per, Listener listener) {
requestPermission(per, content, listener);
}
protected void requestPermission(String[] per, String content, Listener listener) {
if (!TextUtils.isEmpty(content)) {
this.content = content;
}
requestPermission(per, content, true, false, listener);
}
protected void requestPermission(String[] per, String content, boolean show_doNotAskAgain, Listener listener) {
if (!TextUtils.isEmpty(content)) {
this.content = content;
}
requestPermission(per, content, true, show_doNotAskAgain, listener);
}
protected void requestPermission(String[] per, String content, boolean req_permission, boolean show_doNotAskAgain, Listener listener) {
if (!TextUtils.isEmpty(content)) {
this.content = content;
}
requestPermission(per, req_permission, show_doNotAskAgain, listener);
}
/**
* 申请权限
*
* @param permission 权限集合
* @param req_permission 申请权限之前是否提示默认false不提示
* @param show_doNotAskAgain 权限申请失败是否调整到设置页,默认false不关闭
* @param listener 监听
*/
protected void requestPermission(String[] permission, boolean req_permission, boolean show_doNotAskAgain, Listener listener) {
if (!req_permission) {//不弹窗直接申请权限
requestPermission(permission, show_doNotAskAgain, listener);
} else {//先弹窗,再去申请
PermissionDialog permissionDialog = new PermissionDialog(getActivity(), "request_per", "权限申请"
, content, new PermissionDialog.Listener_Result() {
@Override
public void success(boolean b) {
if (b) {//同意申请权限,去申请
requestPermission(permission, show_doNotAskAgain, listener);
} else {//不同意申请权限
}
}
});
permissionDialog.setCanceledOnTouchOutside(false);
permissionDialog.setCancelable(false);
permissionDialog.show();
}
}
private void requestPermission(String[] permission, boolean show_doNotAskAgain, Listener listener) {
XXPermissions.with(getActivity())
.permission(permission)
.request(new OnPermissionCallback() {
@Override
public void onGranted(@NonNull List<String> permissions, boolean allGranted) {
if (!allGranted) {
//获取部分权限成功,但部分权限未正常授予
return;
}
listener.success();
}
@Override
public void onDenied(@NonNull List<String> permissions, boolean doNotAskAgain) {
if (show_doNotAskAgain) {
if (doNotAskAgain) {
//如果是被永久拒绝就跳转到应用权限系统设置页面
XXPermissions.startPermissionActivity(getActivity(), permissions);
} else {
//获取权限失败
}
}
}
});
}
/******************************lifecycle area*****************************************/
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
int resId = getLayoutId();
root = inflater.inflate(resId, container, false);
return root;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initView();
initData(savedInstanceState);
initClick();
processLogic();
}
@Override
public void onDetach() {
super.onDetach();
}
/**************************公共类*******************************************/
public String getName() {
return getClass().getName();
}
protected <VT> VT findViewBy_Id(int id) {
if (root == null) {
return null;
}
return (VT) root.findViewById(id);
}
public interface Listener {
void success();
}
}