原文链接:https://blog.csdn.net/qq_20451879/article/details/121148935
BaseBindingActivity
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.viewbinding.ViewBinding
/**
* @Description:
* @Time:
* @Ps:
*/
abstract class BaseBindingActivity <T : ViewBinding> : AppCompatActivity() {
private lateinit var _binding: T
protected val binding get() = _binding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
_binding = getViewBinding()
setContentView(binding.root)
}
protected abstract fun getViewBinding(): T
}
MainActivity
class MainActivity : BaseBindingActivity<ActivityMainBinding>() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 打开默认第一页
switchFragment(FragmentCreator.getFragment(FragmentCreator.INDEX_TOP0))
// 监听事件
initListener()
logD(TAG," onCreate() ")
}
override fun getViewBinding() = ActivityMainBinding.inflate(layoutInflater)
}
BaseBindingFragment
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.viewbinding.ViewBinding
/**
* @Description: 采用非反射(常规集成)方式封装
* @Time:
* @Ps:
*/
abstract class BaseBindingFragment <T : ViewBinding> : Fragment() {
private lateinit var _binding: T
protected val binding get() = _binding
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
_binding = getViewBinding(inflater, container)
return _binding.root
}
protected abstract fun getViewBinding(inflater: LayoutInflater, container: ViewGroup?): T
}
HomeFragment
import android.view.LayoutInflater
import android.view.ViewGroup
import com.isply.layoutviewpager.base.BaseBindingFragment
import com.isply.layoutviewpager.databinding.FragmentHomeBinding
class HomeFragment: BaseBindingFragment<FragmentHomeBinding>() {
override fun getViewBinding(inflater: LayoutInflater, container: ViewGroup?) =
FragmentHomeBinding.inflate(layoutInflater,container,false)
companion object{
val instance = HomeFragment()
}
}