package cn.flightfeather.thirdappmodule.module.base
|
|
import android.annotation.SuppressLint
|
import android.content.Intent
|
import android.os.Bundle
|
import android.support.v4.app.FragmentTransaction
|
import cn.flightfeather.thirdappmodule.R
|
|
/**
|
* @author riku
|
* Date: 2019/4/16
|
* 包含fragment的基类activity
|
*/
|
abstract class BaseFragmentListActivity : BaseActivity(){
|
|
var lastFragmentPos = -1
|
|
var fragments: ArrayList<BaseFragment>? = null
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
super.onCreate(savedInstanceState)
|
fragments = getFragmentList()
|
initToolbar()
|
navigateTo(0)
|
}
|
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
super.onActivityResult(requestCode, resultCode, data)
|
// fragments?.forEach { it.onActivityResult(requestCode, resultCode, data) }
|
}
|
|
private fun initToolbar() {
|
// getToolBar()?.let { setSupportActionBar(it)}
|
}
|
|
//fragment切换
|
@SuppressLint("CommitTransaction")
|
open fun navigateTo(p: Int, reStart: Boolean = false, transaction: FragmentTransaction? = null) {
|
fragments?.let {
|
if (p >= it.size || p < 0) return
|
|
(transaction ?: supportFragmentManager.beginTransaction())
|
.apply {
|
if (lastFragmentPos >= 0 && lastFragmentPos < it.size) hide(it[lastFragmentPos])
|
if (!it[p].isAdded) {
|
add(getFragmentContainerID(), it[p], it[p].javaClass.simpleName)
|
}
|
show(it[p])
|
}.commitAllowingStateLoss()
|
lastFragmentPos = p
|
}
|
}
|
|
@SuppressLint("CommitTransaction")
|
fun navigateToNext(fragment: BaseFragment) {
|
fragments?.add(fragment)
|
if (fragments?.size ?: 0 > 1) {
|
navigateTo((fragments?.size ?: 0) - 1,
|
transaction = supportFragmentManager.beginTransaction().apply {
|
setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
|
setCustomAnimations(R.anim.right_enter_2, R.anim.left_exit_3)
|
})
|
}
|
}
|
|
@SuppressLint("CommitTransaction")
|
fun navigateBack() {
|
if (fragments?.size ?: 0 > 1) {
|
navigateTo((fragments?.size ?: 0) - 2,
|
transaction = supportFragmentManager.beginTransaction().apply {
|
setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE)
|
setCustomAnimations(R.anim.left_enter_3, R.anim.right_exit_2)
|
})
|
}
|
fragments?.removeAt(fragments?.size!! - 1)
|
}
|
|
/**
|
* 将fragment 从导航栈中删除
|
*/
|
fun deleteFragmentFromNavigation(fragment: BaseFragment) {
|
fragments?.let {list ->
|
if (list.contains(fragment)) {
|
var index = 0
|
for (i in 0 until list.size) {
|
if (list[i] == fragment) {
|
break
|
}
|
index++
|
}
|
fragments?.remove(fragment)
|
if (lastFragmentPos >= index) {
|
lastFragmentPos -= 1
|
}
|
}
|
}
|
}
|
|
abstract fun getFragmentList(): ArrayList<BaseFragment>?
|
|
abstract fun getFragmentContainerID(): Int
|
|
// abstract fun getToolBar(): Toolbar?
|
|
}
|