У меня проблема при попытке перерисовки фрагментов, которые я помещаю в TabLayout с помощью ViewPager, вкладки, которые я генерирую динамически в соответствии с моими строками из моей базы данных anko, работают нормально с первой попытки, но если я выхожу изпросмотр вкладок и повторный ввод. ViewPager не отображает фрагмент, например:
Я вхожу в приложение со страницей входа в систему:
Я заполняю поля, и приложение отправляет меня ко второму фрагменту:
Так что, если я нажму на панель кнопок действий под названием "Salir" приложение перенаправляет на мою страницу входа, если я снова вхожу во фрагмент своих вкладок, это выглядит так:
Если я вызвал функцию "setZoneViewPager" дважды, экземпляр "TablePlanFragment ()" не инициализируется, мой код будет таким:
/**
* @param pager: The container that displays the Fragments of the tables
* @param zones: The Data that retrieves from the anko database
*/
private fun setZoneViewPager(pager: ViewPager, zones: List<ZonesParser>) {
this.activity.let {
it?.supportFragmentManager.let { fm ->
if (fm != null) {
val pagerAdapter = ViewPagerAdapter(fm)
// Limpíar los tabs y las páginas de las tabs
for (zone in zones) {
val bundle = Bundle()
// Put the necessary resources to create a tables
bundle.putInt("idZone", zone.idZone)
bundle.putString("zone", zone.zone)
val page = TablePlanFragment() // ***************This instance only init in one loop, if the setZoneViewPager is called again the tables doesn't renders!!
page.retainInstance = true
page.arguments = bundle
pagerAdapter.addPage(page, zone.zone)
}
pager.adapter = pagerAdapter
}
}
}
}
И это мой класс, который расширяет фрагмент:
class TablePlanFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.tables_plan_layout, container, false)
loadTablePlanByZone(arguments?.getInt("idZone"), arguments?.getString("zone"), view)
return view
}
/**
* Cargar el plano de mesas dependiendo de la zona que se haya seleccionado
*/
private fun loadTablePlanByZone(idZone: Int?, zone: String?, view: View) {
Log.e("MESA", "ENTRO A loadTablePlanByZone")
if (idZone == null) {
longToast("EL identificador de la zona no puede ser null")
} else {
view.context?.let {
Log.e("MESA", "ENTRO AL CONTEXTO DE LA APP")
val context = it
val tables = mutableListOf<TablesParser>()
it.database.use {
select("tableplan", "*").whereArgs("idzone = {idZone}", "idZone" to idZone).orderBy("description")
.exec {
while (this.moveToNext()) {
tables.add(
TablesParser(
this.getInt(0), // ID mesa
this.getStringOrNull(1), // Color
this.getString(2), // Mesa
this.getInt(3), // Personas
this.getDouble(4), // x
this.getDouble(5), // y
this.getDoubleOrNull(6), // r
this.getInt(7), // ID Zona
this.getString(8), // Zona
this.getStringOrNull(9), // Color Zone
this.getStringOrNull(10), // Imagen zona
this.getString(11), // Status
this.getString(12), // Ocupado
this.getIntOrNull(13), // Relacionado a
this.getStringOrNull(14), // Dividida
this.getStringOrNull(15), // Unida
this.getIntOrNull(16), // Venta relacionada
this.getIntOrNull(17) // Venta Original :D
)
)
}
}
}
/**
* Generación del plano de mesas
*/
if (tables.isNotEmpty()) {
// Definir el sistema del grid del RecyclerView
val gridLayoutManager = GridLayoutManager(context, 3, RecyclerView.VERTICAL, false)
gridLayoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
override fun getSpanSize(position: Int): Int = if (position == tables.size) 4 else 1
}
view.recyclerview_tableplan.layoutManager = gridLayoutManager
val adapter = TableRecyclerViewAdapter(tables)
view.recyclerview_tableplan.adapter = adapter
view.recyclerview_tableplan.setHasFixedSize(true)
} else {
context.longToast("No hay mesas en la zona $zone")
}
} ?: longToast("No se encontró el contexto del plano de mesas")
}
}
}
Что я делаю не так?Я надеюсь, что его помощь, спасибо !!