Skip to content

Commit a8540a5

Browse files
committed
接入Navigation改写动态页面
1 parent c6a4000 commit a8540a5

27 files changed

+102
-111
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,9 @@ Model-View-ViewModel,View 指绿色的 Activity/Fragment,主要负责界面
8484
Glide相比起Fresco要轻量很多,api调用起来也很简洁,对图片加载要求不是很高的话建议使用Glide。
8585

8686
# 更新日志
87+
### v2.2
88+
* 接入Navigation改写动态页面
89+
* 调整项目结构,优化代码
8790
### v2.1
8891
* 接入WorkManager实现版本更新功能
8992
* 新增SmallestWidth限定符屏幕适配方案

app/build.gradle

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ android {
1313
applicationId "com.fmt.github"
1414
minSdkVersion 21
1515
targetSdkVersion 29
16-
versionCode 10
17-
versionName "2.1"
16+
versionCode 11
17+
versionName "2.2"
1818
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1919
}
2020
signingConfigs {
@@ -79,6 +79,10 @@ dependencies {
7979
kapt "androidx.room:room-compiler:2.2.5"
8080
implementation "androidx.room:room-ktx:2.2.5"
8181

82+
//navigation
83+
implementation "androidx.navigation:navigation-fragment-ktx:2.3.0-alpha06"
84+
implementation "androidx.navigation:navigation-ui-ktx:2.3.0-alpha06"
85+
8286
//paging
8387
implementation "androidx.paging:paging-runtime-ktx:2.1.2"
8488

@@ -101,7 +105,7 @@ dependencies {
101105
kapt "com.github.bumptech.glide:compiler:4.11.0"
102106
implementation 'com.github.GrenderG:Toasty:1.4.2'
103107
implementation 'com.github.jd-alexander:LikeButton:0.2.3'
104-
implementation 'com.github.Kennyc1012:MultiStateView:2.1.2'
108+
implementation 'com.github.Kennyc1012:MultiStateView:2.1.2'
105109
implementation 'com.jaredrummler:animated-svg-view:1.0.6'
106110
implementation 'com.jeremyliao:live-event-bus-x:1.4.4'
107111
implementation 'com.github.nitrico.lastadapter:lastadapter:2.3.0'
@@ -112,7 +116,7 @@ dependencies {
112116
implementation 'com.github.chrisbanes:PhotoView:2.3.0@aar'
113117

114118
//bugly捕获异常
115-
implementation 'com.tencent.bugly:crashreport:latest.release'
119+
implementation 'com.tencent.bugly:crashreport:3.2.1'
116120
implementation project(path: ':LaunchStarter')
117121

118122
}

app/src/main/java/com/fmt/github/GlideModule.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,4 @@ import com.bumptech.glide.annotation.GlideModule
44
import com.bumptech.glide.module.AppGlideModule
55

66
@GlideModule
7-
class GlideModule : AppGlideModule() {
8-
}
7+
class GlideModule : AppGlideModule()

app/src/main/java/com/fmt/github/WelcomeActivity.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.content.Intent
44
import androidx.lifecycle.lifecycleScope
55
import com.afollestad.assent.*
66
import com.fmt.github.base.activity.BaseDataBindActivity
7+
import com.fmt.github.config.Settings
78
import com.fmt.github.databinding.ActivityWelcomeBinding
89
import com.fmt.github.ext.*
910
import com.fmt.github.home.activity.HomeActivity
@@ -55,6 +56,7 @@ class WelcomeActivity : BaseDataBindActivity<ActivityWelcomeBinding>() {
5556
(userList.isEmpty()).yes {
5657
go2Activity(LoginActivity::class.java)
5758
}.otherwise {
59+
Settings.Account.loginUser = userList[0].login
5860
go2Activity(HomeActivity::class.java)
5961
}
6062
}

app/src/main/java/com/fmt/github/config/Settings.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ object Settings {
77

88
object Account {
99
var token by Preference(Constant.USER_TOKEN, "")
10+
var loginUser by Preference(Constant.LOGIN_USER, "")
1011
var userName by Preference(Constant.USER_NAME, "")
1112
var password by Preference(Constant.USER_PASSWORD, "")
1213
}

app/src/main/java/com/fmt/github/constant/Constant.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.fmt.github.constant
33
object Constant {
44

55
const val USER_TOKEN = "token"
6+
const val LOGIN_USER = "loginUser"
67
const val USER_NAME = "userName"
78
const val USER_PASSWORD = "password"
89
const val AUTHORIZATIONS = "authorizations"

app/src/main/java/com/fmt/github/home/activity/HomeActivity.kt

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import androidx.appcompat.app.ActionBarDrawerToggle
88
import androidx.core.content.ContextCompat
99
import androidx.lifecycle.Observer
1010
import androidx.lifecycle.lifecycleScope
11+
import androidx.navigation.Navigation
1112
import com.fmt.github.R
1213
import com.fmt.github.base.activity.BaseVMActivity
1314
import com.fmt.github.base.viewmodel.BaseViewModel
@@ -16,7 +17,6 @@ import com.fmt.github.databinding.LayoutNavHeaderBinding
1617
import com.fmt.github.ext.getVersionName
1718
import com.fmt.github.ext.showConfirmPopup
1819
import com.fmt.github.ext.yes
19-
import com.fmt.github.home.fragment.ReceivedEventFragment
2020
import com.fmt.github.home.viewmodel.HomeViewModel
2121
import com.fmt.github.home.work.DownLoadWork
2222
import com.fmt.github.user.activity.AboutActivity
@@ -31,7 +31,6 @@ import kotlinx.coroutines.launch
3131
import org.koin.android.ext.android.inject
3232
import org.koin.androidx.viewmodel.ext.android.viewModel
3333

34-
3534
class HomeActivity : BaseVMActivity(), NavigationView.OnNavigationItemSelectedListener {
3635

3736
private val mUserDao: UserDao by inject()//kotlin的val相当于Java的final
@@ -60,7 +59,6 @@ class HomeActivity : BaseVMActivity(), NavigationView.OnNavigationItemSelectedLi
6059
//Androidx的协程支持LifecycleScope、ViewModelScope
6160
mUser = mUserDao.getAll()[0]
6261
initHeaderLayout()
63-
initRecyclerView()
6462
}
6563
}
6664

@@ -88,15 +86,8 @@ class HomeActivity : BaseVMActivity(), NavigationView.OnNavigationItemSelectedLi
8886
}
8987
}
9088

91-
private fun initRecyclerView() {
92-
val beginTransaction = supportFragmentManager.beginTransaction()
93-
beginTransaction.replace(
94-
R.id.frameLayout,
95-
ReceivedEventFragment.newInstance(mUser.login),
96-
"Home_Fragment"
97-
)
98-
beginTransaction.commit()
99-
}
89+
override fun onSupportNavigateUp(): Boolean =
90+
Navigation.findNavController(this, R.id.nav_home_fragment).navigateUp()
10091

10192
override fun onNavigationItemSelected(menuItem: MenuItem): Boolean {
10293
when (menuItem.itemId) {
Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.fmt.github.home.adapter
22

3-
import android.content.Context
4-
import android.content.Intent
3+
import android.app.Activity
54
import android.view.LayoutInflater
65
import android.view.View
76
import android.view.ViewGroup
@@ -10,11 +9,13 @@ import androidx.recyclerview.widget.DiffUtil
109
import androidx.recyclerview.widget.RecyclerView
1110
import com.fmt.github.databinding.LayoutReceivedEventBinding
1211
import com.fmt.github.home.model.ReceivedEventModel
13-
import com.fmt.github.repos.activity.ReposDetailActivity
12+
import com.fmt.github.repos.activity.go2ReposDetailActivity
13+
import com.fmt.github.user.activity.go2UserInfoActivity
14+
import com.fmt.github.user.model.UserModel
1415

1516
const val BASE_WEB_URL = "https://github.com/"
1617

17-
class HomeAdapter(private val mContext: Context) :
18+
class HomeAdapter(private val mContext: Activity) :
1819
PagedListAdapter<ReceivedEventModel, HomeAdapter.ViewHolder>(object :
1920
DiffUtil.ItemCallback<ReceivedEventModel>() {
2021
override fun areItemsTheSame(oldItem: ReceivedEventModel, newItem: ReceivedEventModel) =
@@ -38,27 +39,25 @@ class HomeAdapter(private val mContext: Context) :
3839
getItem(position)?.let { receivedEventModel ->
3940
holder.bindData(receivedEventModel)
4041
holder.itemView.setOnClickListener {
41-
go2ReposDetailActivity(receivedEventModel)
42+
val splitArr = receivedEventModel.repo.name.split("/")
43+
go2ReposDetailActivity(mContext,"${BASE_WEB_URL}${receivedEventModel.repo.name}",
44+
splitArr[1],splitArr[0])
4245
}
4346
}
4447
}
4548

46-
private fun go2ReposDetailActivity(receivedEventModel: ReceivedEventModel) {
47-
val splitArr = receivedEventModel.repo.name.split("/")
48-
with(Intent(mContext, ReposDetailActivity::class.java)) {
49-
putExtra(ReposDetailActivity.WEB_URL, "${BASE_WEB_URL}${receivedEventModel.repo.name}")
50-
putExtra(ReposDetailActivity.OWNER, splitArr[0])
51-
putExtra(ReposDetailActivity.REPO, splitArr[1])
52-
}.run {
53-
mContext.startActivity(this)
54-
}
55-
}
56-
57-
class ViewHolder(itemView: View, val binding: LayoutReceivedEventBinding) :
49+
inner class ViewHolder(itemView: View, val binding: LayoutReceivedEventBinding) :
5850
RecyclerView.ViewHolder(itemView) {
5951

6052
fun bindData(receivedEventModel: ReceivedEventModel) {
6153
binding.item = receivedEventModel
54+
binding.ivHead.setOnClickListener {
55+
go2UserInfoActivity(
56+
mContext,
57+
binding.ivHead,
58+
UserModel(receivedEventModel.actor.login, receivedEventModel.actor.avatar_url)
59+
)
60+
}
6261
}
6362
}
6463
}

app/src/main/java/com/fmt/github/home/fragment/ReceivedEventFragment.kt

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.fmt.github.home.fragment
22

3-
import android.os.Bundle
43
import androidx.paging.PagedListAdapter
54
import com.fmt.github.base.fragment.BasePagingVMFragment
65
import com.fmt.github.base.viewmodel.BaseViewModel
6+
import com.fmt.github.config.Settings
77
import com.fmt.github.home.adapter.HomeAdapter
88
import com.fmt.github.home.model.ReceivedEventModel
99
import com.fmt.github.home.viewmodel.ReceivedEventViewModel
@@ -12,30 +12,12 @@ import org.koin.androidx.viewmodel.ext.android.viewModel
1212
class ReceivedEventFragment :
1313
BasePagingVMFragment<ReceivedEventModel, ReceivedEventViewModel, HomeAdapter.ViewHolder>() {
1414

15-
private var mUserName = ""
16-
1715
private val mReceivedEventViewModel: ReceivedEventViewModel by viewModel()
1816

1917
override fun getViewModel(): BaseViewModel = mReceivedEventViewModel
2018

21-
companion object {
22-
23-
const val KEY = "key"
24-
25-
fun newInstance(userName: String): ReceivedEventFragment {
26-
val reposFragment = ReceivedEventFragment()
27-
val arguments = Bundle()
28-
arguments.putString(KEY, userName)
29-
reposFragment.arguments = arguments
30-
return reposFragment
31-
}
32-
}
33-
3419
override fun afterViewCreated() {
35-
arguments?.let {
36-
mUserName = it.getString(KEY).toString()
37-
mViewModel.user = mUserName
38-
}
20+
mViewModel.user = Settings.Account.loginUser
3921
}
4022

4123
override fun getAdapter(): PagedListAdapter<ReceivedEventModel, HomeAdapter.ViewHolder> =

app/src/main/java/com/fmt/github/repos/activity/ReposDetailActivity.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.fmt.github.repos.activity
22

3+
import android.content.Context
4+
import android.content.Intent
35
import android.view.KeyEvent
46
import android.view.View
57
import android.widget.LinearLayout
@@ -124,4 +126,14 @@ class ReposDetailActivity : BaseVMActivity() {
124126
}.otherwise {
125127
super.onKeyDown(keyCode, event)
126128
}
129+
}
130+
131+
fun go2ReposDetailActivity(context: Context, webUrl: String, repo: String, owner: String) {
132+
with(Intent(context, ReposDetailActivity::class.java)) {
133+
putExtra(ReposDetailActivity.WEB_URL, webUrl)
134+
putExtra(ReposDetailActivity.REPO, repo)
135+
putExtra(ReposDetailActivity.OWNER, owner)
136+
}.run {
137+
context.startActivity(this)
138+
}
127139
}

0 commit comments

Comments
 (0)