簡體   English   中英

Android Kotlin app RecyclerView 無顯示,適配器不工作,無錯誤

[英]Android Kotlin app RecyclerView Showing Nothing, Adapter Not Working, No errors

我正在嘗試 Api 和一個簡單的 MVP Kotlin 應用程序,我為它做了一切,我收到了適配器中的硬幣列表,但是當我在 bind() 中進行登錄時,它沒有向我顯示任何錯誤並且應用程序運行好吧,但沒有任何項目。 我有一個具有相同代碼的類似應用程序,但它運行良好,所以我不知道該怎么做。 我給你我的代碼,謝謝!

主要活動

class MainActivity : AppCompatActivity(),
    CoinsView {

    lateinit var presenter: MainPresenter
    lateinit var numAdapter: MainAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val remoteRepository = RemoteRepoCalls(RetrofitFactory.getCoinApi())

        presenter = MainPresenter(
            this,
            remoteRepository
        )

        recyclerViewMain.layoutManager = LinearLayoutManager(this)
        recyclerViewMain.setHasFixedSize(true)

        numAdapter = MainAdapter()
        recyclerViewMain.adapter = numAdapter

        presenter.getMonedas("3")
    }

    override fun showData(result: List<Coins>) {
        //numAdapter.getData(result)
        numAdapter.getData(result)
    }
}

主適配器:

class MainAdapter: RecyclerView.Adapter<MainAdapter.ViewHolder>() {

    var listNums : List<Coins> = listOf<Coins>()


    fun getData(list: List<Coins>) {
        listNums = list
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MainAdapter.ViewHolder {
        return ViewHolder.from(parent)
    }

    //Tamaño lista
    override fun getItemCount(): Int = listNums.size

    //Nos pasa cada dato de la lista segun posicion
    override fun onBindViewHolder(holder: MainAdapter.ViewHolder, position: Int) {
        holder.bind(listNums[position])
    }

    //Rellena la vista con cada dato
    class ViewHolder private constructor(view: View): RecyclerView.ViewHolder(view) {
        private val coinNames = view.findViewById<TextView>(R.id.coinName)
        private val coinSymbol = view.findViewById<TextView>(R.id.coinSymbol)
        //private val imageItem1 = view.findViewById<ImageView>(R.id.imageItem)

        fun bind(coinss : Coins) {
            coinNames.text = coinss.name
            coinSymbol.text = coinss.symbol
            //Picasso.get().load(coinss.thumbnail).into(imageItem1)
        }

        companion object {
            fun from(parent: ViewGroup): ViewHolder {
                val view = LayoutInflater.from(parent.context).inflate(R.layout.item, parent, false)
                return ViewHolder(view)
            }
        }
    }

}

主講人:

class MainPresenter(
    private val view: CoinsView,
    private val remoteRepository: RemoteRepository,
    private val mainDispatcher: CoroutineDispatcher = Dispatchers.Main,
    private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO
) {
    fun getMonedas(limite: String) {
        CoroutineScope(ioDispatcher).launch {

            var resultado = remoteRepository.getCoins(limite)

            withContext(mainDispatcher) {
                view.showData(resultado)

            }
        }
    }
}
interface CoinsView {
    fun showData(result : List<Coins>)
}

CoinRanking.kt:

interface CoinRanking {
    @GET("coins")
    suspend fun getAll(): Response <EveryData>
}

object RetrofitFactory {

    const val BASE_URL = "https://api.coinranking.com/v1/public/"

    fun getCoinApi(): CoinRanking {
        return Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(MoshiConverterFactory.create())
            .build().create(CoinRanking::class.java)
    }
}

硬幣 Model:

data class Coins (
    var symbol: String,
    var name: String,
    var iconUrl: String,
    var price: String
)

AppPhoto:在標題下應該顯示帶有硬幣物品的回收商

您是否在更新適配器中的列表后嘗試調用 notifyDataSetChanged()? 似乎適配器沒有刷新。

我建議更改此行:

var listNums : List<Coins> = listOf<Coins>()

進入這個:

val listNums : ArrayList<Coins> = arrayListOf<Coins>()

然后也更改此方法(請將其重命名為更能反映其性質的名稱):

    fun getData(list: List<Coins>) {
        listNums.clear()
        listNums.addAll(list)
        notifyDataSetChanged()
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM