修改第三方view 依赖注入 崩溃问题
This commit is contained in:
@@ -4,7 +4,9 @@ import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.View.inflate
|
||||
import android.view.ViewGroup
|
||||
import androidx.databinding.DataBindingUtil
|
||||
import androidx.fragment.app.viewModels
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.Observer
|
||||
@@ -21,14 +23,14 @@ import com.navinfo.volvo.tools.DisplayUtil
|
||||
import com.navinfo.volvo.ui.fragments.BaseFragment
|
||||
import com.yanzhenjie.recyclerview.*
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import kotlinx.coroutines.flow.collect
|
||||
import kotlinx.coroutines.launch
|
||||
import java.io.IOException
|
||||
|
||||
@AndroidEntryPoint
|
||||
class HomeFragment : BaseFragment(), OnItemClickListener, OnItemMenuClickListener {
|
||||
|
||||
private var _binding: FragmentHomeBinding? = null
|
||||
private lateinit var _binding: FragmentHomeBinding
|
||||
private var headView: HomeAdapterNotingBinding? = null
|
||||
|
||||
// This property is only valid between onCreateView and
|
||||
// onDestroyView.
|
||||
@@ -36,14 +38,15 @@ class HomeFragment : BaseFragment(), OnItemClickListener, OnItemMenuClickListene
|
||||
private val viewModel by viewModels<HomeViewModel>()
|
||||
|
||||
private val messageAdapter by lazy { HomeAdapter(this) }
|
||||
private var headBinding: HomeAdapterNotingBinding? = null
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
|
||||
): View {
|
||||
_binding = FragmentHomeBinding.inflate(inflater, container, false)
|
||||
val root: View = _binding!!.root
|
||||
_binding = DataBindingUtil.inflate(inflater, R.layout.fragment_home, container, false)
|
||||
// _binding = FragmentHomeBinding.inflate(inflater, container, false)
|
||||
val root: View = _binding.root
|
||||
_binding.lifecycleOwner = this
|
||||
|
||||
headBinding = HomeAdapterNotingBinding.inflate(inflater, container, false)
|
||||
headView = HomeAdapterNotingBinding.inflate(inflater, container, false)
|
||||
initView()
|
||||
return root
|
||||
}
|
||||
@@ -51,9 +54,9 @@ class HomeFragment : BaseFragment(), OnItemClickListener, OnItemMenuClickListene
|
||||
private fun initView() {
|
||||
//创建菜单选项
|
||||
//注意:使用滑动菜单不能开启滑动删除,否则只有滑动删除没有滑动菜单
|
||||
var mSwipeMenuCreator = SwipeMenuCreator { _, rightMenu, _ ->
|
||||
val mSwipeMenuCreator = SwipeMenuCreator { _, rightMenu, _ ->
|
||||
//预览
|
||||
var previewItem = SwipeMenuItem(context)
|
||||
val previewItem = SwipeMenuItem(context)
|
||||
previewItem.height = DisplayUtil.dip2px(requireContext(), 60f)
|
||||
previewItem.width = DisplayUtil.dip2px(requireContext(), 80f)
|
||||
previewItem.background = requireContext().getDrawable(R.color.yellow)
|
||||
@@ -62,7 +65,7 @@ class HomeFragment : BaseFragment(), OnItemClickListener, OnItemMenuClickListene
|
||||
rightMenu.addMenuItem(previewItem)
|
||||
|
||||
//分享
|
||||
var shareItem = SwipeMenuItem(context)
|
||||
val shareItem = SwipeMenuItem(context)
|
||||
shareItem.height = DisplayUtil.dip2px(requireContext(), 60f)
|
||||
shareItem.width = DisplayUtil.dip2px(requireContext(), 80f)
|
||||
shareItem.background = requireContext().getDrawable(R.color.blue)
|
||||
@@ -71,7 +74,7 @@ class HomeFragment : BaseFragment(), OnItemClickListener, OnItemMenuClickListene
|
||||
rightMenu.addMenuItem(shareItem)
|
||||
|
||||
//添加菜单自动添加至尾部
|
||||
var deleteItem = SwipeMenuItem(context)
|
||||
val deleteItem = SwipeMenuItem(context)
|
||||
deleteItem.height = DisplayUtil.dip2px(requireContext(), 60f)
|
||||
deleteItem.width = DisplayUtil.dip2px(requireContext(), 80f)
|
||||
deleteItem.text = requireContext().getString(R.string.delete)
|
||||
@@ -82,96 +85,93 @@ class HomeFragment : BaseFragment(), OnItemClickListener, OnItemMenuClickListene
|
||||
}
|
||||
|
||||
val layoutManager = LinearLayoutManager(context)
|
||||
_binding?.let {
|
||||
_binding!!.homeRecyclerview.layoutManager = layoutManager
|
||||
//自动增加分割线
|
||||
_binding!!.homeRecyclerview.addItemDecoration(
|
||||
DividerItemDecoration(
|
||||
context, layoutManager.orientation
|
||||
)
|
||||
_binding.homeRecyclerview.layoutManager = layoutManager
|
||||
//自动增加分割线
|
||||
_binding.homeRecyclerview.addItemDecoration(
|
||||
DividerItemDecoration(
|
||||
context, layoutManager.orientation
|
||||
)
|
||||
//增加侧滑按钮
|
||||
_binding!!.homeRecyclerview.setSwipeMenuCreator(mSwipeMenuCreator)
|
||||
//单项点击
|
||||
_binding!!.homeRecyclerview.setOnItemClickListener(this)
|
||||
)
|
||||
//增加侧滑按钮
|
||||
_binding.homeRecyclerview.setSwipeMenuCreator(mSwipeMenuCreator)
|
||||
//单项点击
|
||||
_binding.homeRecyclerview.setOnItemClickListener(this)
|
||||
|
||||
_binding!!.homeRecyclerview.setLoadMoreListener {
|
||||
Log.e("jingo", "下拉加载开始")
|
||||
_binding.homeRecyclerview.setLoadMoreListener {
|
||||
Log.e("jingo", "下拉加载开始")
|
||||
|
||||
} // 加载更多的监听。
|
||||
} // 加载更多的监听。
|
||||
|
||||
//开始下拉刷新
|
||||
_binding!!.homeSwipeRefreshLayout.setOnRefreshListener {
|
||||
Log.e("jingo", "开始刷新")
|
||||
//开始下拉刷新
|
||||
_binding.homeSwipeRefreshLayout.setOnRefreshListener {
|
||||
Log.e("jingo", "开始刷新")
|
||||
// viewModel.getNetMessageList()
|
||||
messageAdapter.refresh()
|
||||
}
|
||||
messageAdapter.refresh()
|
||||
}
|
||||
|
||||
//列表自动分页
|
||||
lifecycleScope.launch {
|
||||
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
||||
viewModel.getNetMessageList().collect {
|
||||
messageAdapter.submitData(it)
|
||||
}
|
||||
//列表自动分页
|
||||
lifecycleScope.launch {
|
||||
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
||||
viewModel.getNetMessageList().collect {
|
||||
messageAdapter.submitData(it)
|
||||
}
|
||||
}
|
||||
//侧滑菜单的监听必需在设置adapter之前
|
||||
_binding!!.homeRecyclerview.setOnItemMenuClickListener { menuBridge, adapterPosition ->
|
||||
menuBridge.closeMenu()
|
||||
}
|
||||
//侧滑菜单的监听必需在设置adapter之前
|
||||
_binding.homeRecyclerview.setOnItemMenuClickListener { menuBridge, adapterPosition ->
|
||||
menuBridge.closeMenu()
|
||||
// val direction: Int = menuBridge.getDirection() // 左侧还是右侧菜单。
|
||||
|
||||
when (menuBridge.position) {// 菜单在RecyclerView的Item中的Position。
|
||||
0 -> {//预览按钮
|
||||
}
|
||||
1 -> {//分享按钮
|
||||
}
|
||||
2 -> {//删除按钮
|
||||
viewModel.deleteMessage(messageAdapter.getItemData(adapterPosition).id)
|
||||
}
|
||||
|
||||
when (menuBridge.position) {// 菜单在RecyclerView的Item中的Position。
|
||||
0 -> {//预览按钮
|
||||
}
|
||||
}
|
||||
|
||||
_binding!!.homeRecyclerview.adapter = messageAdapter
|
||||
|
||||
//初始状态添加监听
|
||||
messageAdapter.addLoadStateListener {
|
||||
when (it.refresh) {
|
||||
is LoadState.NotLoading -> {
|
||||
_binding!!.homeSwipeRefreshLayout.isRefreshing = false
|
||||
if (messageAdapter.itemCount == 0)
|
||||
_binding?.let {
|
||||
_binding!!.homeRecyclerview.addHeaderView(headBinding?.root)
|
||||
}
|
||||
else {
|
||||
_binding?.let {
|
||||
_binding!!.homeRecyclerview.removeHeaderView(headBinding?.root)
|
||||
}
|
||||
}
|
||||
Log.d("jingo", "is NotLoading")
|
||||
}
|
||||
is LoadState.Loading -> {
|
||||
Log.d("jingo", "is Loading")
|
||||
_binding!!.homeSwipeRefreshLayout.isRefreshing = true
|
||||
}
|
||||
is LoadState.Error -> {
|
||||
_binding!!.homeSwipeRefreshLayout.isRefreshing = false
|
||||
Log.d("jingo", "is Error:")
|
||||
when ((it.refresh as LoadState.Error).error) {
|
||||
is IOException -> {
|
||||
Log.d("jingo", "IOException")
|
||||
}
|
||||
else -> {
|
||||
Log.d("jingo", "others exception")
|
||||
}
|
||||
}
|
||||
}
|
||||
1 -> {//分享按钮
|
||||
}
|
||||
2 -> {//删除按钮
|
||||
viewModel.deleteMessage(messageAdapter.getItemData(adapterPosition).id)
|
||||
}
|
||||
}
|
||||
|
||||
loadMoreFinish()
|
||||
}
|
||||
}
|
||||
|
||||
_binding.homeRecyclerview.adapter = messageAdapter
|
||||
|
||||
//初始状态添加监听
|
||||
messageAdapter.addLoadStateListener {
|
||||
when (it.refresh) {
|
||||
is LoadState.NotLoading -> {
|
||||
_binding.homeSwipeRefreshLayout.isRefreshing = false
|
||||
headView?.let {
|
||||
|
||||
if (messageAdapter.itemCount == 0) {
|
||||
if (_binding.homeRecyclerview.headerCount == 0)
|
||||
_binding.homeRecyclerview.addHeaderView(headView!!.root)
|
||||
} else {
|
||||
if (_binding.homeRecyclerview.headerCount > 0)
|
||||
_binding.homeRecyclerview.removeHeaderView(headView!!.root)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
is LoadState.Loading -> {
|
||||
_binding.homeSwipeRefreshLayout.isRefreshing = true
|
||||
}
|
||||
is LoadState.Error -> {
|
||||
_binding.homeSwipeRefreshLayout.isRefreshing = false
|
||||
when ((it.refresh as LoadState.Error).error) {
|
||||
is IOException -> {
|
||||
Log.d("jingo", "刷新 IOException $")
|
||||
}
|
||||
else -> {
|
||||
Log.d("jingo", "刷新 others exception")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
loadMoreFinish()
|
||||
|
||||
//监听数据请求是否结束
|
||||
viewModel.isLoading.observe(viewLifecycleOwner, Observer {
|
||||
if (!it) loadMoreFinish()
|
||||
@@ -179,13 +179,11 @@ class HomeFragment : BaseFragment(), OnItemClickListener, OnItemMenuClickListene
|
||||
}
|
||||
|
||||
private fun loadMoreFinish() {
|
||||
_binding?.let {
|
||||
_binding!!.homeSwipeRefreshLayout.isRefreshing = false
|
||||
// 第一次加载数据:一定要掉用这个方法。
|
||||
// 第一个参数:表示此次数据是否为空,假如你请求到的list为空(== null || list.size == 0),那么这里就要true。
|
||||
// 第二个参数:表示是否还有更多数据,根据服务器返回给你的page等信息判断是否还有更多,这样可以提供性能,如果不能判断则传true。
|
||||
_binding!!.homeRecyclerview.loadMoreFinish(false, true)
|
||||
}
|
||||
_binding.homeSwipeRefreshLayout.isRefreshing = false
|
||||
// 第一次加载数据:一定要掉用这个方法。
|
||||
// 第一个参数:表示此次数据是否为空,假如你请求到的list为空(== null || list.size == 0),那么这里就要true。
|
||||
// 第二个参数:表示是否还有更多数据,根据服务器返回给你的page等信息判断是否还有更多,这样可以提供性能,如果不能判断则传true。
|
||||
_binding.homeRecyclerview.loadMoreFinish(false, true)
|
||||
}
|
||||
|
||||
|
||||
@@ -196,8 +194,7 @@ class HomeFragment : BaseFragment(), OnItemClickListener, OnItemMenuClickListene
|
||||
|
||||
override fun onDestroyView() {
|
||||
super.onDestroyView()
|
||||
_binding = null
|
||||
headBinding = null
|
||||
headView = null
|
||||
}
|
||||
|
||||
//点击项
|
||||
|
||||
@@ -51,6 +51,7 @@ import com.nhaarman.supertooltips.ToolTip
|
||||
import dagger.hilt.android.AndroidEntryPoint
|
||||
import indi.liyi.viewer.Utils
|
||||
import indi.liyi.viewer.ViewData
|
||||
import me.jagar.chatvoiceplayerlibrary.VoicePlayerView
|
||||
import top.zibin.luban.Luban
|
||||
import top.zibin.luban.OnCompressListener
|
||||
import java.io.File
|
||||
@@ -78,6 +79,8 @@ class ObtainMessageFragment : Fragment() {
|
||||
// onDestroyView.
|
||||
private val binding get() = _binding!!
|
||||
|
||||
private lateinit var voiceView: VoicePlayerView
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
@@ -86,6 +89,10 @@ class ObtainMessageFragment : Fragment() {
|
||||
_binding = FragmentObtainMessageBinding.inflate(inflater, container, false)
|
||||
val root: View = binding.root
|
||||
|
||||
voiceView =
|
||||
LayoutInflater.from(requireActivity()).inflate(R.layout.widget_voice_player, null)
|
||||
.findViewById(R.id.voicePlayerView)
|
||||
_binding!!.llAudioPlay.addView(voiceView)
|
||||
var messege = arguments?.getParcelable<GreetingMessage>("message")
|
||||
if (messege == null) {
|
||||
messege = GreetingMessage(who = obtainMessageViewModel.username)
|
||||
@@ -493,12 +500,12 @@ class ObtainMessageFragment : Fragment() {
|
||||
}
|
||||
|
||||
override fun success(file: File) {
|
||||
binding.voicePlayerView.setAudio(localFile.absolutePath)
|
||||
voiceView.setAudio(localFile.absolutePath)
|
||||
}
|
||||
|
||||
})
|
||||
} else {
|
||||
binding.voicePlayerView.setAudio(localFile.absolutePath)
|
||||
voiceView.setAudio(localFile.absolutePath)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user