Android 我的新职位总是给我-1“;

Android 我的新职位总是给我-1“;,android,kotlin,android-recyclerview,Android,Kotlin,Android Recyclerview,我正在使用改装来收集数据并打印我的recyclerview。我只是想,当我点击行中的任何一个时,新的活动就会打开。但我在日志中看到,位置值总是“-1”。我找不到任何解决方案。你知道吗? 此日志屏幕截图: 这是我的主要活动: class MainActivity : AppCompatActivity(),MyItemClickListener { override fun onCreate(savedInstanceState: Bundle?) { super.onCr

我正在使用改装来收集数据并打印我的recyclerview。我只是想,当我点击行中的任何一个时,新的活动就会打开。但我在日志中看到,位置值总是“-1”。我找不到任何解决方案。你知道吗? 此日志屏幕截图:

这是我的主要活动:

class MainActivity : AppCompatActivity(),MyItemClickListener {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        ApiClient.client?.create(ApiInterface::class.java)?.tumModelleriGetir()
            ?.enqueue(object : Callback<List<AracModel>> {
                override fun onFailure(call: Call<List<AracModel>>, t: Throwable) {
                    Log.e("hata", "" + t?.printStackTrace())
                }
                override fun onResponse(
                    call: Call<List<AracModel>>,
                    response: Response<List<AracModel>>
                ) {
                    Log.e("başarılı", call?.request().url()?.toString())
                    var gelenData = response?.body()
                    var modellist= ArrayList(response.body()!!)
                    rv.layoutManager=LinearLayoutManager(this@MainActivity,LinearLayoutManager.VERTICAL,false)
                    rv.adapter=ModelAdapter(modellist,this@MainActivity)
                    //for (i in 0..response?.body()?.size!! - 1)
                      //  Log.e("başarılı", "" + response?.body()?.get(i)?.model.toString())
                } }) }

    override fun userItemClick(position: Int) {

        Log.e("pozisyon","pozisyon: "+position)
        when(position){

            3->{
                Toast.makeText(this,"deneme",Toast.LENGTH_SHORT).show()
            }
        }
    }
}
class MainActivity:AppCompatActivity(),MyItemClickListener{
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
ApiClient.client?.create(apinterface::class.java)?.tumModelleriGetir()
?.排队(对象:回调){
覆盖失效时的乐趣(调用:调用,t:可丢弃){
Log.e(“hata”,“+t?.printStackTrace())
}
覆盖响应(
呼叫:呼叫,,
答复:答复
) {
Log.e(“başarılı”,call?.request().url()?.toString())
var gelenData=响应?.body()
var modellist=ArrayList(response.body()!!)
rv.layoutManager=LinearLayoutManager(this@MainActivity,LinearLayoutManager。垂直,错误)
rv.适配器=模型适配器(模型列表,this@MainActivity)
//对于(0..response?.body()?.size!!-1中的i)
//Log.e(“başarılı,”“+response?.body()?.get(i)?.model.toString())
} }) }
覆盖用户项单击(位置:Int){
Log.e(“pozisyon”,“pozisyon:+位置”)
何时(职位){
3->{
Toast.makeText(这是“deneme”,Toast.LENGTH\u SHORT.show())
}
}
}
}
这是我的适配器:

class ModelAdapter(var modelliste: List<AracModel>, var context: Context) :
    RecyclerView.Adapter<ModelAdapter.AracModelViewHolder>() {
    private val itemClickListener = context as MyItemClickListener
    //var modellist = ArrayList(response.body()!!)

    var modellist = modelliste
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AracModelViewHolder {

        var inflater = LayoutInflater.from(parent.context)
        var teksatirmodel = inflater.inflate(R.layout.tek_satir_model, parent, false)


        var opelViewHolder = AracModelViewHolder(teksatirmodel)
        teksatirmodel.setOnClickListener {
            itemClickListener.userItemClick(opelViewHolder.adapterPosition)
        }
        return AracModelViewHolder(teksatirmodel)
    }

    override fun getItemCount(): Int {
        return modellist.size
    }

    override fun onBindViewHolder(holder: AracModelViewHolder, position: Int) {
        val oAnolusturulanSatir = modellist.get(position)
        holder.setData(oAnolusturulanSatir, position)
    }
    class AracModelViewHolder(viewGroup: View) : RecyclerView.ViewHolder(viewGroup) {
        var teksatirliste = itemView as CardView
        var modeltitle = teksatirliste.tvListeBaslik

        fun setData(modelliste: AracModel, position: Int) {

            modeltitle.text = modelliste.model }
    }
}
class ModelAdapter(var-modelliste:List,var-context:context):
RecyclerView.Adapter(){
private val itemClickListener=作为MyItemClickListener的上下文
//var modellist=ArrayList(response.body()!!)
var modellist=modellister
override fun onCreateViewHolder(父级:ViewGroup,viewType:Int):AracModelViewHolder{
var inflater=LayoutInflater.from(parent.context)
var teksatirmodel=充气机充气(R.layout.tek_satir_模型,父项,false)
var opelViewHolder=AracModelViewWholder(teksatirmodel)
teksatirmodel.setOnClickListener{
itemClickListener.userItemClick(opelViewHolder.adapterPosition)
}
返回ARACMODELVIEWOLDER(teksatirmodel)
}
重写getItemCount():Int{
返回modellist.size
}
覆盖BindViewHolder(holder:AracModelViewHolder,位置:Int){
val-oanolusturalansatir=modellist.get(位置)
支架设置数据(OANOLUTURULANSATIR,位置)
}
类AracModelViewHolder(视图组:视图):RecyclerView.ViewHolder(视图组){
var teksatirliste=itemView作为CardView
var modeltitle=teksatirliste.tvlistebasilik
fun setData(modelsite:AracModel,position:Int){
modeltitle.text=modelliste.model}
}
}

viewHolder.adapterPosition是屏幕上以像素为单位的位置,而不是数据列表中的位置。而且它并不总是最新的。您应该在视图持有者实现中放置一个
var-dataPosition
,并在
onBindView
中进行设置。然后在单击侦听器中使用它。

viewHolder。adapterPosition
是屏幕上以像素为单位的位置,而不是数据列表中的位置。而且它并不总是最新的。您应该在视图持有者实现中放置一个
var-dataPosition
,并在
onBindView
中进行设置。然后在您的click listener中使用它。

您应该将调用绑定到onBindViewHolder中的clickListener,而不是onCreateViewHolder中的clickListener,因为项目可以循环使用,并且位置在参数中给出

override fun onBindViewHolder(holder: AracModelViewHolder, position: Int) {
        val oAnolusturulanSatir = modellist.get(position)
        holder.setData(oAnolusturulanSatir, position)
        holder.itemView.setOnClickListener {
               itemClickListener.userItemClick(position)
        }
}

您应该将调用绑定到onBindViewHolder中的clickListener,而不是onCreateViewHolder中的clickListener,因为项目可以循环使用,并且位置在参数中给出

override fun onBindViewHolder(holder: AracModelViewHolder, position: Int) {
        val oAnolusturulanSatir = modellist.get(position)
        holder.setData(oAnolusturulanSatir, position)
        holder.itemView.setOnClickListener {
               itemClickListener.userItemClick(position)
        }
}

你可以试试下面的方法

class ModelAdapter(var modelliste: List<AracModel>, var context: Context) :
    RecyclerView.Adapter<ModelAdapter.AracModelViewHolder>() {
    private val itemClickListener = context as MyItemClickListener
    //var modellist = ArrayList(response.body()!!)

    var modellist = modelliste
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AracModelViewHolder {

        var inflater = LayoutInflater.from(parent.context)
        var teksatirmodel = inflater.inflate(R.layout.tek_satir_model, parent, false)

        return AracModelViewHolder(teksatirmodel)
    }

    override fun getItemCount(): Int {
        return modellist.size
    }

    override fun onBindViewHolder(holder: AracModelViewHolder, position: Int) {
        val oAnolusturulanSatir = modellist.get(position)
        holder.setData(oAnolusturulanSatir, position)
        // her you can set click listener on your item view
        holder.itemView.setOnClickListener {
            itemClickListener.userItemClick(position)
        }
    }
    class AracModelViewHolder(viewGroup: View) : RecyclerView.ViewHolder(viewGroup) {
        var teksatirliste = itemView as CardView
        var modeltitle = teksatirliste.tvListeBaslik

        fun setData(modelliste: AracModel, position: Int) {

            modeltitle.text = modelliste.model }
    }
}
class ModelAdapter(var-modelliste:List,var-context:context):
RecyclerView.Adapter(){
private val itemClickListener=作为MyItemClickListener的上下文
//var modellist=ArrayList(response.body()!!)
var modellist=modellister
override fun onCreateViewHolder(父级:ViewGroup,viewType:Int):AracModelViewHolder{
var inflater=LayoutInflater.from(parent.context)
var teksatirmodel=充气机充气(R.layout.tek_satir_模型,父项,false)
返回ARACMODELVIEWOLDER(teksatirmodel)
}
重写getItemCount():Int{
返回modellist.size
}
覆盖BindViewHolder(holder:AracModelViewHolder,位置:Int){
val-oanolusturalansatir=modellist.get(位置)
支架设置数据(OANOLUTURULANSATIR,位置)
//您可以在项目视图上设置click listener
holder.itemView.setOnClickListener{
itemClickListener.userItemClick(位置)
}
}
类AracModelViewHolder(视图组:视图):RecyclerView.ViewHolder(视图组){
var teksatirliste=itemView作为CardView
var modeltitle=teksatirliste.tvlistebasilik
fun setData(modelsite:AracModel,position:Int){
modeltitle.text=modelliste.model}
}
}

您可以尝试以下方法

class ModelAdapter(var modelliste: List<AracModel>, var context: Context) :
    RecyclerView.Adapter<ModelAdapter.AracModelViewHolder>() {
    private val itemClickListener = context as MyItemClickListener
    //var modellist = ArrayList(response.body()!!)

    var modellist = modelliste
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AracModelViewHolder {

        var inflater = LayoutInflater.from(parent.context)
        var teksatirmodel = inflater.inflate(R.layout.tek_satir_model, parent, false)

        return AracModelViewHolder(teksatirmodel)
    }

    override fun getItemCount(): Int {
        return modellist.size
    }

    override fun onBindViewHolder(holder: AracModelViewHolder, position: Int) {
        val oAnolusturulanSatir = modellist.get(position)
        holder.setData(oAnolusturulanSatir, position)
        // her you can set click listener on your item view
        holder.itemView.setOnClickListener {
            itemClickListener.userItemClick(position)
        }
    }
    class AracModelViewHolder(viewGroup: View) : RecyclerView.ViewHolder(viewGroup) {
        var teksatirliste = itemView as CardView
        var modeltitle = teksatirliste.tvListeBaslik

        fun setData(modelliste: AracModel, position: Int) {

            modeltitle.text = modelliste.model }
    }
}
class ModelAdapter(var-modelliste:List,var-context:context):
RecyclerView.Adapter(){
private val itemClickListener=作为MyItemClickListener的上下文
//var modellist=ArrayList(response.body()!!)
var modellist=modellister
override fun onCreateViewHolder(父级:ViewGroup,viewType:Int):AracModelViewHolder{
var inflater=LayoutInflater.from(parent.context)
var teksatirmodel=充气机充气(R.layout.tek_satir_模型,父项,false)
返回ARACMODELVIEWOLDER