Skip to content

Commit d7cd131

Browse files
committed
修复bug
1 parent 722c121 commit d7cd131

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+797
-364
lines changed

app/src/main/java/com/uiuang/cloudknowledge/app/http/ApiService.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -196,13 +196,13 @@ interface ApiService {
196196
* 收藏
197197
*/
198198
@POST("/lg/collect/{id}/json")
199-
suspend fun collect(@Path("id") id: Int): ApiResponse<Any>
199+
suspend fun collect(@Path("id") id: Int): ApiResponse<Any?>
200200

201201
/**
202202
* 取消收藏
203203
*/
204204
@POST("/lg/uncollect_originId/{id}/json")
205-
suspend fun unCollect(@Path("id") id: Int): ApiResponse<Any>
205+
suspend fun unCollect(@Path("id") id: Int): ApiResponse<Any?>
206206

207207

208208
/**
@@ -218,7 +218,7 @@ interface ApiService {
218218
* 取消收藏网址
219219
*/
220220
@POST("lg/collect/deletetool/json")
221-
suspend fun deletetool(@Query("id") id: Int): ApiResponse<Any?>
221+
suspend fun delCollectUrl(@Query("id") id: Int): ApiResponse<Any?>
222222

223223
/**
224224
* 获取收藏文章数据

app/src/main/java/com/uiuang/cloudknowledge/bean/ArticlesBean.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class ArticlesBean(
1717
var origin: String? = null,
1818
var projectLink: String? = null,
1919
var publishTime: Long = 0,
20-
var title: String? = null,
20+
var title: String = "",
2121
var visible: Int? = 0,
2222
var zan: Int? = 0,
2323
var order: Int,

app/src/main/java/com/uiuang/cloudknowledge/bean/GankIOResultBean.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,5 @@ data class GankIOResultBean(
2020
var author: String? = null,
2121
var images: List<String>? = null,
2222
var image: String = "",
23-
var title: String? = null
23+
var title: String = ""
2424
)

app/src/main/java/com/uiuang/cloudknowledge/bean/WanAndroidBannerBean.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ data class WanAndroidBannerBean(
44
val desc: String,
55
val imagePath: String,
66
val title: String,
7-
val url: String
7+
val url: String,
8+
var id: Int = 0,
9+
var order: Int = 0,
10+
var type: Int = 0
811
) {
912

1013
/**
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.uiuang.cloudknowledge.bean.wan
2+
3+
import android.os.Parcelable
4+
import com.uiuang.cloudknowledge.data.enums.CollectType
5+
import kotlinx.android.parcel.Parcelize
6+
7+
@Parcelize
8+
data class WebBean(
9+
var id: Int,
10+
var collect: Boolean,//是否收藏
11+
var title: String,
12+
var url: String,
13+
var collectType: Int = CollectType.Article.type
14+
) : Parcelable

app/src/main/java/com/uiuang/cloudknowledge/ext/CustomViewExt.kt

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,39 @@ package com.uiuang.cloudknowledge.ext
22

33
import android.app.Activity
44
import android.content.Context
5+
import android.content.res.ColorStateList
56
import android.graphics.Color
7+
import android.graphics.drawable.ColorDrawable
8+
import android.graphics.drawable.GradientDrawable
69
import android.view.View
710
import android.view.animation.AccelerateInterpolator
811
import android.view.animation.DecelerateInterpolator
912
import android.view.inputmethod.InputMethodManager
13+
import android.widget.CompoundButton
1014
import android.widget.FrameLayout
1115
import android.widget.LinearLayout
1216
import android.widget.TextView
17+
import androidx.appcompat.widget.AppCompatRadioButton
1318
import androidx.appcompat.widget.Toolbar
1419
import androidx.constraintlayout.widget.ConstraintLayout
20+
import androidx.core.content.ContextCompat
1521
import androidx.fragment.app.Fragment
1622
import androidx.recyclerview.widget.LinearLayoutManager
1723
import androidx.recyclerview.widget.RecyclerView
1824
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
1925
import androidx.viewpager2.adapter.FragmentStateAdapter
2026
import androidx.viewpager2.widget.ViewPager2
2127
import com.chad.library.adapter.base.BaseQuickAdapter
28+
import com.google.android.material.appbar.AppBarLayout
29+
import com.google.android.material.appbar.CollapsingToolbarLayout
2230
import com.google.android.material.floatingactionbutton.FloatingActionButton
2331
import com.google.android.material.tabs.TabLayout
2432
import com.google.android.material.tabs.TabLayoutMediator
2533
import com.ittianyu.bottomnavigationviewex.BottomNavigationViewEx
2634
import com.kingja.loadsir.core.LoadService
2735
import com.kingja.loadsir.core.LoadSir
2836
import com.uiuang.cloudknowledge.R
37+
import com.uiuang.cloudknowledge.app.App
2938
import com.uiuang.cloudknowledge.app.state.ListDataUiState
3039
import com.uiuang.cloudknowledge.bean.ClassifyResponse
3140
import com.uiuang.cloudknowledge.ui.fragment.gank.GankFragment
@@ -89,13 +98,13 @@ fun LoadService<*>.showLoading() {
8998
}
9099

91100
fun loadServiceInit(view: View, callback: () -> Unit): LoadService<Any> {
92-
val loadsir = LoadSir.getDefault().register(view) {
101+
val loadSir = LoadSir.getDefault().register(view) {
93102
//点击重试时触发的操作
94103
callback.invoke()
95104
}
96-
loadsir.showSuccess()
97-
// SettingUtil.setLoadingColor(SettingUtil.getColor(appContext), loadsir)
98-
return loadsir
105+
loadSir.showSuccess()
106+
SettingUtil.setLoadingColor(SettingUtil.getColor(appContext), loadSir)
107+
return loadSir
99108
}
100109

101110
//绑定普通的Recyclerview
@@ -144,7 +153,7 @@ fun SwipeRecyclerView.initFooter(loadMoreListener: SwipeRecyclerView.LoadMoreLis
144153
return footerView
145154
}
146155

147-
fun RecyclerView.initFloatBtn(floatbtn: FloatingActionButton) {
156+
fun RecyclerView.initFloatBtn(floatBtn: FloatingActionButton) {
148157
//监听recyclerview滑动到顶部的时候,需要把向上返回顶部的按钮隐藏
149158
// addOnScrollListener(object : RecyclerView.OnScrollListener() {
150159
// @SuppressLint("RestrictedApi")
@@ -155,8 +164,8 @@ fun RecyclerView.initFloatBtn(floatbtn: FloatingActionButton) {
155164
// }
156165
// }
157166
// })
158-
floatbtn.backgroundTintList = SettingUtil.getOneColorStateList(appContext)
159-
floatbtn.setOnClickListener {
167+
floatBtn.backgroundTintList = SettingUtil.getOneColorStateList(appContext)
168+
floatBtn.setOnClickListener {
160169
val layoutManager = layoutManager as LinearLayoutManager
161170
//如果当前recyclerview 最后一个视图位置的索引大于等于40,则迅速返回顶部,否则带有滚动动画效果返回到顶部
162171
if (layoutManager.findLastVisibleItemPosition() >= 40) {
@@ -223,11 +232,22 @@ fun setUiTheme(color: Int, vararg anyList: Any?) {
223232
it.itemIconTintList = SettingUtil.getColorStateList(color)
224233
it.itemTextColor = SettingUtil.getColorStateList(color)
225234
}
235+
is CompoundButton -> it.setTextColor(SettingUtil.getColorStateList(color))
236+
is LinearLayout -> it.setBackgroundColor(color)
226237
is Toolbar -> it.setBackgroundColor(color)
227238
is TextView -> it.setTextColor(color)
228-
is LinearLayout -> it.setBackgroundColor(color)
229239
is ConstraintLayout -> it.setBackgroundColor(color)
240+
is CollapsingToolbarLayout -> it.contentScrim = ColorDrawable(color)
241+
242+
is AppBarLayout -> it.setBackgroundColor(color)
243+
is TabLayout -> {
244+
it.setTabTextColors(ContextCompat.getColor(appContext, R.color.colorGray),color)
245+
it.setSelectedTabIndicatorColor(color)
246+
}
247+
is View -> it.setBackgroundColor(color)
230248
is FrameLayout -> it.setBackgroundColor(color)
249+
250+
231251
}
232252
}
233253
}

app/src/main/java/com/uiuang/cloudknowledge/ui/adapter/wan/WanAndroidAdapter.kt

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,14 @@ import com.chad.library.adapter.base.viewholder.BaseViewHolder
1212
import com.uiuang.cloudknowledge.R
1313
import com.uiuang.cloudknowledge.bean.ArticlesBean
1414
import com.uiuang.cloudknowledge.utils.DataUtil
15+
import com.uiuang.cloudknowledge.weight.customview.CollectView
1516

1617
class WanAndroidAdapter(data: MutableList<ArticlesBean>) :
1718
BaseQuickAdapter<ArticlesBean, BaseViewHolder>(R.layout.item_wan_android, data) {
19+
20+
private var collectAction: (item: ArticlesBean, v: CollectView, position: Int) -> Unit =
21+
{ _: ArticlesBean, _: CollectView, _: Int -> }
22+
1823
/**
1924
* 是我的收藏页进来的,全部是收藏状态。bean里面没有返回isCollect信息
2025
*/
@@ -67,11 +72,13 @@ class WanAndroidAdapter(data: MutableList<ArticlesBean>) :
6772

6873
holder.setText(R.id.tv_time, item.niceDate)
6974
holder.setText(R.id.tv_title, Html.fromHtml(item.title))
70-
if (isCollectList) {
71-
val cbCollect = holder.getView<CheckBox>(R.id.cb_collect)
72-
cbCollect.isChecked = true
73-
}
74-
75+
holder.getView<CollectView>(R.id.item_home_collect).isChecked = item.collect
76+
holder.getView<CollectView>(R.id.item_home_collect)
77+
.setOnCollectViewClickListener(object : CollectView.OnCollectViewClickListener {
78+
override fun onClick(v: CollectView) {
79+
collectAction.invoke(item, v, holder.adapterPosition)
80+
}
81+
})
7582
}
7683

7784
fun setCollectList() {
@@ -86,6 +93,10 @@ class WanAndroidAdapter(data: MutableList<ArticlesBean>) :
8693
isNoShowAuthorName = true
8794
}
8895

96+
fun setCollectClick(inputCollectAction: (item: ArticlesBean, v: CollectView, position: Int) -> Unit) {
97+
this.collectAction = inputCollectAction
98+
}
99+
89100

90101
fun setNoImage(isNoImage: Boolean) {
91102
this.isNoImage = isNoImage

app/src/main/java/com/uiuang/cloudknowledge/ui/fragment/gank/AndroidFragment.kt

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import com.kingja.loadsir.core.LoadService
88
import com.uiuang.cloudknowledge.R
99
import com.uiuang.cloudknowledge.app.base.BaseFragment
1010
import com.uiuang.cloudknowledge.app.http.Constants.TYPE
11+
import com.uiuang.cloudknowledge.bean.wan.WebBean
12+
import com.uiuang.cloudknowledge.data.enums.CollectType
1113
import com.uiuang.cloudknowledge.databinding.FragmentAndroidBinding
1214
import com.uiuang.cloudknowledge.ext.*
1315
import com.uiuang.cloudknowledge.ui.adapter.gank.GankAndroidAdapter
@@ -17,14 +19,15 @@ import com.uiuang.cloudknowledge.weight.recyclerview.DefineLoadMoreView
1719
import com.uiuang.mvvm.ext.nav
1820
import com.uiuang.mvvm.ext.navigateAction
1921
import com.yanzhenjie.recyclerview.SwipeRecyclerView
20-
import kotlinx.android.synthetic.main.fragment_sister.*
22+
import kotlinx.android.synthetic.main.include_list.*
23+
import kotlinx.android.synthetic.main.include_recyclerview.*
2124

2225

2326
class AndroidFragment : BaseFragment<HomeViewModel, FragmentAndroidBinding>() {
2427
private var type: String? = null
2528

2629
//界面状态管理者
27-
private lateinit var loadsir: LoadService<Any>
30+
private lateinit var loadSir: LoadService<Any>
2831

2932
//请求ViewModel
3033
private val requestGankViewModel: RequestGankViewModel by viewModels()
@@ -45,17 +48,17 @@ class AndroidFragment : BaseFragment<HomeViewModel, FragmentAndroidBinding>() {
4548
}
4649
}
4750

48-
override fun layoutId(): Int = R.layout.fragment_android
51+
override fun layoutId(): Int = R.layout.include_list
4952

5053
override fun initView(savedInstanceState: Bundle?) {
5154
arguments?.let {
5255
type = it.getString(TYPE)
5356
}
5457

5558
//状态页配置
56-
loadsir = loadServiceInit(swipeRefresh) {
59+
loadSir = loadServiceInit(swipeRefresh) {
5760
//点击重试时触发的操作
58-
loadsir.showLoading()
61+
loadSir.showLoading()
5962
requestGankViewModel.loadGankData(true, type)
6063
}
6164
//初始化recyclerView
@@ -68,7 +71,7 @@ class AndroidFragment : BaseFragment<HomeViewModel, FragmentAndroidBinding>() {
6871
requestGankViewModel.loadGankData(false, type)
6972
})
7073
//初始化FloatingActionButton
71-
// it.initFloatBtn(floatBtn)
74+
it.initFloatBtn(floatBtn)
7275
}
7376
//初始化 SwipeRefreshLayout
7477
swipeRefresh.init {
@@ -77,31 +80,35 @@ class AndroidFragment : BaseFragment<HomeViewModel, FragmentAndroidBinding>() {
7780
}
7881
gankAndroidAdapter.setOnItemClickListener { _, _, position ->
7982
val item = gankAndroidAdapter.getItem(position)
80-
openDetail(item.url, item.desc)
83+
nav().navigateAction(R.id.action_global_webViewFragment, Bundle().apply {
84+
val webBean = WebBean(
85+
0,
86+
false,
87+
item.title,
88+
item.url,
89+
CollectType.Url.type
90+
)
91+
putParcelable("webBean", webBean)
92+
})
8193
}
8294
}
8395

8496
override fun createObserver() {
8597
requestGankViewModel.sisterDataState.observe(viewLifecycleOwner, Observer {
8698
//设值 新写了个拓展函数,搞死了这个恶心的重复代码
87-
loadListData(it, gankAndroidAdapter, loadsir, recyclerView, swipeRefresh)
99+
loadListData(it, gankAndroidAdapter, loadSir, recyclerView, swipeRefresh)
100+
})
101+
appViewModel.appColor.observe(viewLifecycleOwner, Observer {
102+
//监听全局的主题颜色改变
103+
setUiTheme(it, floatBtn, swipeRefresh, loadSir, footView)
88104
})
89105
}
90106

91107
override fun lazyLoadData() {
92108
//设置界面 加载中
93-
loadsir.showLoading()
109+
loadSir.showLoading()
94110
requestGankViewModel.loadGankData(true, type)
95111
}
96112

97113

98-
private fun openDetail(url: String?, title: String?, isTitleFix: Boolean = false) {
99-
if (!url.isNullOrEmpty()) {
100-
nav().navigateAction(R.id.action_global_webViewFragment, Bundle().apply {
101-
putString("url", url)
102-
putBoolean("isTitleFix", isTitleFix)
103-
putString("title", if (title.isNullOrEmpty()) url else title)
104-
})
105-
}
106-
}
107114
}

0 commit comments

Comments
 (0)