RecyclerView поменять местами два адаптера - PullRequest
0 голосов
/ 03 сентября 2018

Я хочу создать приложение, которое показывает последние 15 совпадений и следующие 15 совпадений, используя API. Я создал RecyclerView с 2 различными представлениями списка. Один для последнего матча, а другой для следующего матча. Я также создал 2 разных адаптера, поэтому, когда я нажимаю на другую панель навигации, она меняет представление (например, последнее совпадение) на другое представление (следующее сопоставление). Однако, когда я нажимаю вторую кнопку (следующий матч), она прекращается.

Я думаю, что проблема в наборе адаптеров, но я не знаю, где

Вот мои коды:

MainActivity.kt

private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
    when (item.itemId) {
        R.id.navigation_home -> {
            //Prev Match
            recyclerView_main.layoutManager = LinearLayoutManager(this)
            fetchJsons()
            return@OnNavigationItemSelectedListener true
        }
        R.id.navigation_dashboard -> {
            //Next Match
            recyclerView_main.layoutManager = LinearLayoutManager(this)
            fetchJson()
            return@OnNavigationItemSelectedListener true
        }
    }
    false
}
fun fetchJsons(){
    //Json for prev match
    val url = "https://www.thesportsdb.com/api/v1/json/1/eventspastleague.php?id=4328"
    val request = Request.Builder().url(url).build()
    val client = OkHttpClient()
    client.newCall(request).enqueue(object: Callback{
        override fun onResponse(call: Call?, response: Response?){
            println("sukses")
            val body = response?.body()?.string()
            println(body)

            val gson = GsonBuilder().create()

            val prevMatch = gson.fromJson(body, PrevMatch::class.java)

            runOnUiThread { recyclerView_main.adapter = MainAdapters(prevMatch) }
        }
        override fun onFailure(call: Call?, e: IOException?){
            println("failed request")
        }
    })
}

// Next Match JSON
fun fetchJson(){
    val url = "https://www.thesportsdb.com/api/v1/json/1/eventsnextleague.php?id=4328"
    val request = Request.Builder().url(url).build()
    val client = OkHttpClient()
    client.newCall(request).enqueue(object: Callback{
        override fun onResponse(call: Call?, response: Response?){
            println("sukses")
            val body = response?.body()?.string()
            println(body)

            val gson = GsonBuilder().create()

            val nextMatch = gson.fromJson(body, NextMatch::class.java)

            runOnUiThread { recyclerView_main.adapter = MainAdapter(nextMatch) }
        }
        override fun onFailure(call: Call?, e: IOException?){
            println("failed request")
        }
    })
}

1 Ответ

0 голосов
/ 04 сентября 2018

Вот что я сделаю, я создам два recyclerView и переключаюсь между ними. и разделить данные из API между ними.

private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
        when (item.itemId) {
            R.id.navigation_home -> {
                //Prev Match
                recyclerView_Next_Match.visibility = View.GONE
                recyclerView_Prev_Match.visibility = View.VISIBLE
                fetchJsons()
                return@OnNavigationItemSelectedListener true
            }
            R.id.navigation_dashboard -> {
                //Next Match
                recyclerView_Prev_Match.visibility = View.GONE
                recyclerView_Next_Match.visibility = View.VISIBLE
                fetchJson()
                return@OnNavigationItemSelectedListener true
            }
        }
        false
    }
...