Невозможно отобразить фрагмент, если я выйду и снова войду в представление в Котлине - PullRequest
0 голосов
/ 01 марта 2019

У меня проблема при попытке перерисовки фрагментов, которые я помещаю в TabLayout с помощью ViewPager, вкладки, которые я генерирую динамически в соответствии с моими строками из моей базы данных anko, работают нормально с первой попытки, но если я выхожу изпросмотр вкладок и повторный ввод. ViewPager не отображает фрагмент, например:

Я вхожу в приложение со страницей входа в систему:

enter image description here

Я заполняю поля, и приложение отправляет меня ко второму фрагменту:

enter image description here

Так что, если я нажму на панель кнопок действий под названием "Salir" приложение перенаправляет на мою страницу входа, если я снова вхожу во фрагмент своих вкладок, это выглядит так:

enter image description here

Если я вызвал функцию "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")
        }
    }
}

Что я делаю не так?Я надеюсь, что его помощь, спасибо !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...