rss列表切换布局

pull/219/head
yangyxd 5 years ago
parent 80e5001317
commit 2e9b6cccc3
  1. 6
      app/src/main/java/io/legado/app/help/AppConfig.kt
  2. 4
      app/src/main/java/io/legado/app/ui/rss/article/RssArticlesAdapter.kt
  3. 5
      app/src/main/java/io/legado/app/ui/rss/article/RssArticlesFragment.kt
  4. 55
      app/src/main/java/io/legado/app/ui/rss/article/RssSortActivity.kt
  5. 7
      app/src/main/res/menu/rss_articles.xml
  6. 1
      app/src/main/res/values/strings.xml

@ -132,6 +132,12 @@ object AppConfig {
val readBodyToLh: Boolean get() = App.INSTANCE.getPrefBoolean(PreferKey.readBodyToLh, true)
val isGooglePlay: Boolean get() = App.INSTANCE.channel == "google"
var rssLayout: Int
get() = App.INSTANCE.getPrefInt("rssLayoutMode")
set(value) {
App.INSTANCE.putPrefInt("rssLayoutMode", value)
}
}
val Context.channel: String

@ -18,8 +18,8 @@ import org.jetbrains.anko.sdk27.listeners.onClick
import org.jetbrains.anko.textColorResource
class RssArticlesAdapter(context: Context, val callBack: CallBack) :
SimpleRecyclerAdapter<RssArticle>(context, R.layout.item_rss_article) {
class RssArticlesAdapter(context: Context, private val layoutId: Int, val callBack: CallBack) :
SimpleRecyclerAdapter<RssArticle>(context, layoutId) {
override fun convert(holder: ItemViewHolder, item: RssArticle, payloads: MutableList<Any>) {
with(holder.itemView) {

@ -51,11 +51,12 @@ class RssArticlesFragment : VMBaseFragment<RssArticlesViewModel>(R.layout.fragme
initData()
}
private fun initView() {
fun initView() {
ATH.applyEdgeEffectColor(recycler_view)
recycler_view.layoutManager = LinearLayoutManager(requireContext())
recycler_view.addItemDecoration(VerticalDivider(requireContext()))
adapter = RssArticlesAdapter(requireContext(), this)
var layoutId = R.layout.item_rss_article;
adapter = RssArticlesAdapter(requireContext(), layoutId, this)
recycler_view.adapter = adapter
loadMoreView = LoadMoreView(requireContext())
adapter.addFooterView(loadMoreView)

@ -9,12 +9,12 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentStatePagerAdapter
import androidx.lifecycle.Observer
import io.legado.app.App
import io.legado.app.R
import io.legado.app.base.VMBaseActivity
import io.legado.app.help.AppConfig
import io.legado.app.ui.rss.source.edit.RssSourceEditActivity
import io.legado.app.utils.getViewModel
import io.legado.app.utils.gone
import io.legado.app.utils.visible
import io.legado.app.utils.*
import kotlinx.android.synthetic.main.activity_rss_artivles.*
import org.jetbrains.anko.startActivityForResult
import java.util.*
@ -26,8 +26,6 @@ class RssSortActivity : VMBaseActivity<RssSortViewModel>(R.layout.activity_rss_a
private val editSource = 12319
private val fragments = linkedMapOf<String, RssArticlesFragment>()
private lateinit var adapter: TabFragmentPageAdapter
private val channels = LinkedHashMap<String, String>()
private var groupMenu: Menu? = null
override fun onActivityCreated(savedInstanceState: Bundle?) {
adapter = TabFragmentPageAdapter(supportFragmentManager)
@ -37,7 +35,6 @@ class RssSortActivity : VMBaseActivity<RssSortViewModel>(R.layout.activity_rss_a
title_bar.title = it
})
viewModel.initData(intent) {
upChannelMenu()
upFragments()
}
}
@ -48,8 +45,6 @@ class RssSortActivity : VMBaseActivity<RssSortViewModel>(R.layout.activity_rss_a
}
override fun onPrepareOptionsMenu(menu: Menu?): Boolean {
groupMenu = menu
upChannelMenu()
return super.onPrepareOptionsMenu(menu)
}
@ -63,31 +58,11 @@ class RssSortActivity : VMBaseActivity<RssSortViewModel>(R.layout.activity_rss_a
viewModel.clearArticles()
}
}
}
if (item.groupId == R.id.source_channel) {
val key = item.title.toString();
val i = fragments.keys.indexOf(key)
if (i >= 0)
view_pager.currentItem = i
}
return super.onCompatOptionsItemSelected(item)
}
private fun upChannelMenu() {
// 加入频道列表
groupMenu?.removeGroup(R.id.source_channel)
val sourceChannel = viewModel.rssSource?.sourceGroup
channels.clear()
sourceChannel?.split("\n\n")?.forEach { c ->
val d = c.split("::")
if (d.size > 1) {
channels[d[0]] = d[1]
val item = groupMenu?.add(R.id.source_channel, Menu.NONE, Menu.NONE, d[0])
item?.isCheckable = true
val keys = fragments.keys
item?.isChecked = keys.indexOf(d[0]) == view_pager.currentItem
R.id.menu_switch_layout -> {
switchLayout()
}
}
return super.onCompatOptionsItemSelected(item)
}
private fun upFragments() {
@ -95,13 +70,7 @@ class RssSortActivity : VMBaseActivity<RssSortViewModel>(R.layout.activity_rss_a
viewModel.rssSource?.sortUrls()?.forEach {
fragments[it.key] = RssArticlesFragment.create(it.key, it.value)
}
val sortUrlsSize = fragments.size
if (sortUrlsSize <= 1) {
channels.forEach {
fragments[it.key] = RssArticlesFragment.create(it.key, it.value)
}
}
if (sortUrlsSize == 1) {
if (fragments.size == 1) {
tab_layout.gone()
} else {
tab_layout.visible()
@ -109,6 +78,16 @@ class RssSortActivity : VMBaseActivity<RssSortViewModel>(R.layout.activity_rss_a
adapter.notifyDataSetChanged()
}
/** 切换布局 */
private fun switchLayout() {
var i = AppConfig.rssLayout + 1
if (i > 2) i = 0
AppConfig.rssLayout = i
fragments?.forEach {
it.value?.initView()
};
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {

@ -12,8 +12,9 @@
android:title="@string/clear"
app:showAsAction="never" />
<group android:id="@+id/source_channel">
</group>
<item
android:id="@+id/menu_switch_layout"
android:title="@string/switchLayout"
app:showAsAction="never" />
</menu>

@ -243,6 +243,7 @@
<string name="del_all">删除所有</string>
<string name="searchHistory">搜索历史</string>
<string name="clear">清除</string>
<string name="switchLayout">切换布局</string>
<string name="showTitle">正文显示标题</string>
<string name="refresh_default">书源同步</string>
<string name="no_last_chapter">无最新章节信息</string>

Loading…
Cancel
Save