[英]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
)
您是否在更新適配器中的列表后嘗試調用 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.