Skip to content

Commit ad63ec6

Browse files
committed
commit
1 parent c6532c8 commit ad63ec6

7 files changed

Lines changed: 287 additions & 0 deletions

File tree

app/src/main/java/com/cxz/wanandroid/adapter/KnowledgePagerAdapter.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ class KnowledgePagerAdapter(val list: List<Knowledge>, fm: FragmentManager) : Fr
1616
private val fragments = mutableListOf<Fragment>()
1717

1818
init {
19+
fragments.clear()
1920
list.forEach {
2021
fragments.add(KnowledgeFragment.getInstance(it.id))
2122
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.cxz.wanandroid.adapter
2+
3+
import android.support.v4.app.Fragment
4+
import android.support.v4.app.FragmentManager
5+
import android.support.v4.app.FragmentStatePagerAdapter
6+
import android.support.v4.view.PagerAdapter
7+
import android.text.Html
8+
import com.cxz.wanandroid.mvp.model.bean.WXChapterBean
9+
import com.cxz.wanandroid.ui.fragment.KnowledgeFragment
10+
11+
/**
12+
* @author chenxz
13+
* @date 2018/10/28
14+
* @desc
15+
*/
16+
class WeChatPagerAdapter(private val list: MutableList<WXChapterBean>, fm: FragmentManager?)
17+
: FragmentStatePagerAdapter(fm) {
18+
19+
private val fragments = mutableListOf<Fragment>()
20+
21+
init {
22+
fragments.clear()
23+
list.forEach {
24+
fragments.add(KnowledgeFragment.getInstance(it.id))
25+
}
26+
}
27+
28+
override fun getItem(position: Int): Fragment = fragments[position]
29+
30+
override fun getCount(): Int = list.size
31+
32+
override fun getPageTitle(position: Int): CharSequence? = Html.fromHtml(list[position].name)
33+
34+
override fun getItemPosition(`object`: Any): Int = PagerAdapter.POSITION_NONE
35+
36+
37+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.cxz.wanandroid.mvp.contract
2+
3+
import com.cxz.wanandroid.base.IPresenter
4+
import com.cxz.wanandroid.base.IView
5+
import com.cxz.wanandroid.mvp.model.bean.WXChapterBean
6+
7+
/**
8+
* @author chenxz
9+
* @date 2018/10/28
10+
* @desc
11+
*/
12+
interface WeChatContract {
13+
14+
interface View : IView {
15+
16+
fun scrollToTop()
17+
18+
fun showWXChapters(chapters: MutableList<WXChapterBean>)
19+
20+
}
21+
22+
interface Presenter : IPresenter<View> {
23+
fun getWXChapters()
24+
}
25+
26+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.cxz.wanandroid.mvp.model
2+
3+
import com.cxz.wanandroid.base.BaseModel
4+
import com.cxz.wanandroid.http.RetrofitHelper
5+
import com.cxz.wanandroid.mvp.model.bean.HttpResult
6+
import com.cxz.wanandroid.mvp.model.bean.WXChapterBean
7+
import com.cxz.wanandroid.rx.SchedulerUtils
8+
import io.reactivex.Observable
9+
10+
/**
11+
* @author chenxz
12+
* @date 2018/10/28
13+
* @desc
14+
*/
15+
class WeChatModel : BaseModel() {
16+
17+
fun getWXChapters(): Observable<HttpResult<MutableList<WXChapterBean>>> {
18+
return RetrofitHelper.service.getWXChapters()
19+
.compose(SchedulerUtils.ioToMain())
20+
}
21+
22+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.cxz.wanandroid.mvp.presenter
2+
3+
import com.cxz.wanandroid.base.BasePresenter
4+
import com.cxz.wanandroid.http.exception.ExceptionHandle
5+
import com.cxz.wanandroid.http.function.RetryWithDelay
6+
import com.cxz.wanandroid.mvp.contract.WeChatContract
7+
import com.cxz.wanandroid.mvp.model.WeChatModel
8+
9+
/**
10+
* @author chenxz
11+
* @date 2018/10/28
12+
* @desc
13+
*/
14+
class WeChatPresenter : BasePresenter<WeChatContract.View>(), WeChatContract.Presenter {
15+
16+
private val weChatModel: WeChatModel by lazy {
17+
WeChatModel()
18+
}
19+
20+
override fun getWXChapters() {
21+
mView?.showLoading()
22+
val disposable = weChatModel.getWXChapters()
23+
.retryWhen(RetryWithDelay())
24+
.subscribe({ results ->
25+
mView?.run {
26+
if (results.errorCode != 0) {
27+
showError(results.errorMsg)
28+
} else {
29+
showWXChapters(results.data)
30+
}
31+
hideLoading()
32+
}
33+
}, { t ->
34+
mView?.apply {
35+
hideLoading()
36+
showError(ExceptionHandle.handleException(t))
37+
}
38+
})
39+
addSubscription(disposable)
40+
}
41+
42+
}
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
package com.cxz.wanandroid.ui.fragment
2+
3+
import android.support.design.widget.TabLayout
4+
import com.cxz.wanandroid.R
5+
import com.cxz.wanandroid.adapter.WeChatPagerAdapter
6+
import com.cxz.wanandroid.base.BaseFragment
7+
import com.cxz.wanandroid.event.ColorEvent
8+
import com.cxz.wanandroid.mvp.contract.WeChatContract
9+
import com.cxz.wanandroid.mvp.model.bean.WXChapterBean
10+
import com.cxz.wanandroid.mvp.presenter.WeChatPresenter
11+
import com.cxz.wanandroid.utils.SettingUtil
12+
import kotlinx.android.synthetic.main.fragment_wechat.*
13+
import org.greenrobot.eventbus.Subscribe
14+
import org.greenrobot.eventbus.ThreadMode
15+
16+
/**
17+
* @author chenxz
18+
* @date 2018/10/28
19+
* @desc
20+
*/
21+
class WeChatFragment : BaseFragment(), WeChatContract.View {
22+
23+
companion object {
24+
fun getInstance(): WeChatFragment = WeChatFragment()
25+
}
26+
27+
/**
28+
* Presenter
29+
*/
30+
private val mPresenter: WeChatPresenter by lazy {
31+
WeChatPresenter()
32+
}
33+
34+
/**
35+
* datas
36+
*/
37+
private val datas = mutableListOf<WXChapterBean>()
38+
39+
/**
40+
* ViewPagerAdapter
41+
*/
42+
private val viewPagerAdapter: WeChatPagerAdapter by lazy {
43+
WeChatPagerAdapter(datas, childFragmentManager)
44+
}
45+
46+
override fun showLoading() {
47+
}
48+
49+
override fun hideLoading() {
50+
}
51+
52+
override fun showError(errorMsg: String) {
53+
}
54+
55+
override fun attachLayoutRes(): Int = R.layout.fragment_wechat
56+
57+
override fun initView() {
58+
mPresenter.attachView(this)
59+
60+
viewPager.run {
61+
addOnPageChangeListener(TabLayout.TabLayoutOnPageChangeListener(tabLayout))
62+
}
63+
64+
tabLayout.run {
65+
setupWithViewPager(viewPager)
66+
// TabLayoutHelper.setUpIndicatorWidth(tabLayout)
67+
addOnTabSelectedListener(TabLayout.ViewPagerOnTabSelectedListener(viewPager))
68+
addOnTabSelectedListener(onTabSelectedListener)
69+
}
70+
71+
refreshColor(ColorEvent(true))
72+
73+
}
74+
75+
override fun lazyLoad() {
76+
mPresenter.getWXChapters()
77+
}
78+
79+
@Subscribe(threadMode = ThreadMode.MAIN)
80+
fun refreshColor(event: ColorEvent) {
81+
if (event.isRefresh) {
82+
if (!SettingUtil.getIsNightMode()) {
83+
tabLayout.setBackgroundColor(SettingUtil.getColor())
84+
}
85+
}
86+
}
87+
88+
override fun doReConnected() {
89+
if (datas.size == 0) {
90+
super.doReConnected()
91+
}
92+
}
93+
94+
override fun showWXChapters(chapters: MutableList<WXChapterBean>) {
95+
96+
chapters.let {
97+
datas.addAll(it)
98+
viewPager.run {
99+
adapter = viewPagerAdapter
100+
offscreenPageLimit = datas.size
101+
}
102+
}
103+
104+
}
105+
106+
/**
107+
* onTabSelectedListener
108+
*/
109+
private val onTabSelectedListener = object : TabLayout.OnTabSelectedListener {
110+
override fun onTabReselected(tab: TabLayout.Tab?) {
111+
}
112+
113+
override fun onTabUnselected(tab: TabLayout.Tab?) {
114+
}
115+
116+
override fun onTabSelected(tab: TabLayout.Tab?) {
117+
// 默认切换的时候,会有一个过渡动画,设为false后,取消动画,直接显示
118+
tab?.let {
119+
viewPager.setCurrentItem(it.position, false)
120+
}
121+
}
122+
}
123+
124+
override fun scrollToTop() {
125+
if (viewPagerAdapter.count == 0) {
126+
return
127+
}
128+
val fragment: ProjectListFragment = viewPagerAdapter.getItem(viewPager.currentItem) as ProjectListFragment
129+
fragment.scrollToTop()
130+
}
131+
132+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto"
4+
android:layout_width="match_parent"
5+
android:layout_height="match_parent"
6+
android:background="@color/viewBackground"
7+
android:orientation="vertical">
8+
9+
<android.support.design.widget.TabLayout
10+
android:id="@+id/tabLayout"
11+
android:layout_width="match_parent"
12+
android:layout_height="wrap_content"
13+
android:background="@color/colorPrimary"
14+
android:theme="@style/AppTheme.AppBarOverlay"
15+
app:tabGravity="center"
16+
app:tabIndicatorColor="@color/white"
17+
app:tabIndicatorHeight="@dimen/dp_2"
18+
app:tabMode="scrollable"
19+
app:tabTextAppearance="@style/TabTextStyle" />
20+
21+
<android.support.v4.view.ViewPager
22+
android:id="@+id/viewPager"
23+
android:layout_width="match_parent"
24+
android:layout_height="match_parent"
25+
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
26+
27+
</LinearLayout>

0 commit comments

Comments
 (0)