diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8bfd0a9..1a4aeb6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -30,17 +30,6 @@ android:supportsRtl="true" android:theme="@style/Theme.NavinfoVolvo" android:usesCleartextTraffic="true"> - - - () 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 } //点击项 diff --git a/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageFragment.kt b/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageFragment.kt index 83af240..7543852 100644 --- a/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageFragment.kt +++ b/app/src/main/java/com/navinfo/volvo/ui/fragments/message/ObtainMessageFragment.kt @@ -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("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) } } diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index c3d2a4e..733bb88 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -1,47 +1,54 @@ - + xmlns:tools="http://schemas.android.com/tools"> - + - + + + + - + android:layout_marginLeft="20dp" + android:layout_marginTop="5dp" + android:layout_marginRight="20dp" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent"> - + + - + - + + + - + + diff --git a/app/src/main/res/layout/fragment_obtain_message.xml b/app/src/main/res/layout/fragment_obtain_message.xml index 6808b3c..bc59fb2 100644 --- a/app/src/main/res/layout/fragment_obtain_message.xml +++ b/app/src/main/res/layout/fragment_obtain_message.xml @@ -232,24 +232,7 @@ android:layout_gravity="center" android:visibility="gone" android:orientation="horizontal"> - + + android:layout_height="match_parent" + xmlns:app="http://schemas.android.com/apk/res-auto"> + android:text="暂无数据,可下拉刷新" /> \ No newline at end of file diff --git a/app/src/main/res/layout/widget_voice_player.xml b/app/src/main/res/layout/widget_voice_player.xml new file mode 100644 index 0000000..5fb9c83 --- /dev/null +++ b/app/src/main/res/layout/widget_voice_player.xml @@ -0,0 +1,22 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml index 75fca9f..c7c719a 100644 --- a/app/src/main/res/navigation/mobile_navigation.xml +++ b/app/src/main/res/navigation/mobile_navigation.xml @@ -24,13 +24,11 @@ tools:layout="@layout/fragment_home"> + app:destination="@id/navigation_obtain_message" /> + app:nullable="true" /> - + tools:layout="@layout/fragment_obtain_message"> \ No newline at end of file