替换掉通过@Param获取bundle参数

main
chenglifeng 7 months ago
parent cf518aeda9
commit 05405ba27e
  1. 7
      app/proguard-rules.pro
  2. 7
      app/src/main/java/com/project/survey/ui/approval/ApprovalActivity.kt
  3. 2
      app/src/main/java/com/project/survey/ui/base/BaseBindingActivity.kt
  4. 2
      app/src/main/java/com/project/survey/ui/base/BaseBindingFragment.kt
  5. 21
      app/src/main/java/com/project/survey/ui/login/LoginInputCodeActivity.kt
  6. 8
      app/src/main/java/com/project/survey/ui/project/ProjectListFragment.kt
  7. 18
      app/src/main/java/com/project/survey/util/param/Param.java
  8. 82
      app/src/main/java/com/project/survey/util/param/ParamUtil.kt

@ -283,10 +283,3 @@ public static final int *;
# 友盟
-keep class com.umeng.** {*;}
# Param
-keep class com.project.survey.util.param.Param { *; }
-keepattributes *Param*
-keepclassmembers class com.project.survey.model.** { *; }
-keepclassmembers class com.project.survey.logic.bean.** { *; }
-keepclassmembers class com.project.survey.logic.event.** { *; }

@ -13,7 +13,6 @@ import com.project.survey.ui.approval.adapter.ApprovalAdapter
import com.project.survey.ui.base.BaseBindingActivity
import com.project.survey.util.ActivityNavUtil
import com.project.survey.util.SPUtils
import com.project.survey.util.param.Param
import com.project.survey.widget.decoration.TransparentDividerDecoration
import com.scwang.smart.refresh.layout.api.RefreshLayout
import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener
@ -24,6 +23,8 @@ import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener
class ApprovalActivity : BaseBindingActivity<ActivityApprovalBinding>(), OnRefreshLoadMoreListener {
companion object {
const val TYPE = "type"
const val PI_PREAPPROV = "PI_PREAPPROV"//待处理
const val PI_APPROVED = "PI_APPROVED"//已处理
const val PI_OWNER = "PI_OWNER"//所有的流程
@ -31,7 +32,7 @@ class ApprovalActivity : BaseBindingActivity<ActivityApprovalBinding>(), OnRefre
fun start(type: String = PI_OWNER) {
ActivityNavUtil.startActivity<ApprovalActivity> {
putString("type", type)
putString(TYPE, type)
}
}
}
@ -41,13 +42,13 @@ class ApprovalActivity : BaseBindingActivity<ActivityApprovalBinding>(), OnRefre
private val viewModel: ProjectViewModel by viewModels()
@Param
private var type: String = ""
private val adapter by lazy { ApprovalAdapter() }
private var currentPage = 1
override fun initView() {
type = intent.getStringExtra(TYPE) ?: ""
immersionToolbar(
mBinding.ilToolBar.toolbar,
when (type) {

@ -10,7 +10,6 @@ import androidx.appcompat.widget.Toolbar
import androidx.viewbinding.ViewBinding
import com.gyf.immersionbar.ImmersionBar
import com.project.survey.R
import com.project.survey.util.param.ParamUtil
import com.project.survey.widget.LoadingDialog
import org.polaric.colorful.Colorful
@ -29,7 +28,6 @@ abstract class BaseBindingActivity<VB : ViewBinding> : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
ParamUtil.initParam(this)
_binding = getBinding()
setContentView(mBinding.root)
// //设置背景色

@ -7,7 +7,6 @@ import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.viewbinding.ViewBinding
import com.project.survey.util.param.ParamUtil
abstract class BaseBindingFragment<VB : ViewBinding> : Fragment() {
@ -25,7 +24,6 @@ abstract class BaseBindingFragment<VB : ViewBinding> : Fragment() {
override fun onAttach(context: Context) {
super.onAttach(context)
mContext = context
ParamUtil.initParam(this)
}
override fun onCreateView(

@ -7,18 +7,21 @@ import com.project.survey.extend.showSoftInput
import com.project.survey.logic.viewmodel.LoginViewModel
import com.project.survey.ui.base.BaseBindingActivity
import com.project.survey.util.ActivityNavUtil
import com.project.survey.util.param.Param
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
class LoginInputCodeActivity : BaseBindingActivity<ActivityLoginInputCodeBinding>() {
companion object {
const val ACCOUNT = "account"
const val PASSWORD = "password"
const val MOBILE = "mobile"
fun start(account: String, password: String, mobile: String) {
ActivityNavUtil.startActivity<LoginInputCodeActivity> {
putString("account", account)
putString("password", password)
putString("mobile", mobile)
putString(ACCOUNT, account)
putString(PASSWORD, password)
putString(MOBILE, mobile)
}
}
}
@ -28,18 +31,16 @@ class LoginInputCodeActivity : BaseBindingActivity<ActivityLoginInputCodeBinding
private val viewModel: LoginViewModel by viewModels()
@Param
private var account: String = ""
@Param
private var password: String = ""
@Param
private var mobile: String = ""
override fun initView() {
account = intent.getStringExtra(ACCOUNT) ?: ""
password = intent.getStringExtra(PASSWORD) ?: ""
mobile = intent.getStringExtra(MOBILE) ?: ""
immersionToolbar(mBinding.toolbar)
password = intent.extras?.getString("password")?:""
lifecycleScope.launch {
delay(500L)

@ -11,18 +11,19 @@ import com.project.survey.logic.viewmodel.ProjectViewModel
import com.project.survey.ui.base.BaseBindingFragment
import com.project.survey.ui.project.adapter.ProjectListAdapter
import com.project.survey.util.SPUtils
import com.project.survey.util.param.Param
import com.project.survey.widget.decoration.HorDividerDecoration
class ProjectListFragment : BaseBindingFragment<FragmentProjectListBinding>() {
companion object {
const val TYPE = "type"
const val TYPE_RECENTLY = "1"
const val TYPE_ALL = "2"
fun newInstance(type: String): Fragment {
return ProjectListFragment().apply {
arguments = bundleOf("type" to type)
arguments = bundleOf(TYPE to type)
}
}
}
@ -35,10 +36,11 @@ class ProjectListFragment : BaseBindingFragment<FragmentProjectListBinding>() {
private val viewModel: ProjectViewModel by viewModels()
private val adapter by lazy { ProjectListAdapter() }
@Param
private var type: String = ""
override fun initView() {
type = arguments?.getString(TYPE, "") ?: ""
mBinding.recyclerView.addItemDecoration(HorDividerDecoration(mContext))
mBinding.recyclerView.setAdapter(adapter)
}

@ -1,18 +0,0 @@
package com.project.survey.util.param;
import androidx.annotation.Keep;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* des 参数解析注解
*/
@Keep
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Param {
String value() default "";
}

@ -1,82 +0,0 @@
package com.project.survey.util.param
import android.app.Activity
import android.os.Bundle
import android.text.TextUtils
import androidx.fragment.app.Fragment
/**
* 页面跳转传参 注解+反射获取页面入参
*/
object ParamUtil {
/**
* Fragment
*/
fun initParam(fragment: Fragment) {
val javaClass = fragment.javaClass
fragment.arguments?.apply {
setParam(fragment, this)
}
}
/**
* Activity
*/
fun initParam(activity: Activity) {
activity.intent.extras?.apply {
setParam(activity, this)
}
}
private fun setParam(obj: Any, intent: Bundle) {
val javaClass = obj.javaClass
val fields = javaClass.declaredFields
for (item in fields) {
if (item.isAnnotationPresent(Param::class.java)) {
item.getAnnotation(Param::class.java)?.let {
val key: String = if (TextUtils.isEmpty(it.value)) item.name else it.value
if (intent.containsKey(key)) {
val type = item.type
when (type) {
Boolean::class.javaPrimitiveType -> {
intent.getBoolean(key, false)
}
Int::class.javaPrimitiveType -> {
intent.getInt(key, 0)
}
Long::class.javaPrimitiveType -> {
intent.getLong(key, 0L)
}
String::class.java -> {
intent.getString(key)
}
Double::class.javaPrimitiveType -> {
intent.getDouble(key, 0.0)
}
Byte::class.javaPrimitiveType -> {
intent.getByte(key, "".toByte())
}
Char::class.javaPrimitiveType -> {
intent.getChar(key, '\u0000')
}
Float::class.javaPrimitiveType -> {
intent.getFloat(key, 0f)
}
else -> {
intent.getParcelable(key)
}
}?.apply {
item.isAccessible = true
try {
item[obj] = this
} catch (e: IllegalAccessException) {
e.printStackTrace()
}
item.isAccessible = false
}
}
}
}
}
}
}
Loading…
Cancel
Save