Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android如何从RecyclerView extend ListAdapter按位置获取项目_Android_Android Recyclerview_Kotlin_Listadapter - Fatal编程技术网

android如何从RecyclerView extend ListAdapter按位置获取项目

android如何从RecyclerView extend ListAdapter按位置获取项目,android,android-recyclerview,kotlin,listadapter,Android,Android Recyclerview,Kotlin,Listadapter,我在我的RecyclerView适配器中使用ListAdapter,如下代码所示 问题是如何通过行位置从视图中获取项对象。 我试图在适配器中编写一个函数,通过从视图调用的项对象的位置来获取该项对象,但由于适配器中没有任何列表,因此无法访问该项对象以获取其项对象值 class QuotesRvAdapter(val mListener : OnQuotesRvListListener): ListAdapter<TblQuote, QuotesRvAdapter.ViewHolder

我在我的RecyclerView适配器中使用ListAdapter,如下代码所示 问题是如何通过行位置从视图中获取项对象。 我试图在适配器中编写一个函数,通过从视图调用的项对象的位置来获取该项对象,但由于适配器中没有任何列表,因此无法访问该项对象以获取其项对象值

class QuotesRvAdapter(val mListener : OnQuotesRvListListener):
    ListAdapter<TblQuote, QuotesRvAdapter.ViewHolder>(TaskDiffCallback())
{

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    val inflater = LayoutInflater.from(parent.context)
    return ViewHolder(inflater.inflate(R.layout.row_quote, parent, false))
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    holder.bind(getItem(position),mListener)
}

class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

    fun bind(quote: TblQuote, mListener: OnQuotesRvListListener) {
        itemView.txtQuoteRow.text = quote.toString()
        itemView.ivDeleteRow.setOnClickListener { mListener.onDeleteQuote(quote) }
        itemView.setOnClickListener{ mListener.onPrepareForUpdate(quote) }
    }
}

class TaskDiffCallback : DiffUtil.ItemCallback<TblQuote>() {
    override fun areItemsTheSame(oldItem: TblQuote, newItem: TblQuote): Boolean {
        return oldItem.id == newItem.id
    }

    override fun areContentsTheSame(oldItem: TblQuote, newItem: TblQuote): Boolean {
        return oldItem == newItem
    }
}


interface OnQuotesRvListListener{
    fun onDeleteQuote(ob: TblQuote)
    fun onPrepareForUpdate(ob: TblQuote)
}

}
class quotesvadapter(val-mListener:onquotesvlistListener):
ListAdapter(TaskDiffCallback())
{
override onCreateViewHolder(父级:ViewGroup,viewType:Int):ViewHolder{
val inflater=LayoutInflater.from(parent.context)
返回视窗支架(充气器。充气(R.layout.row_quote,父项,false))
}
覆盖BindViewHolder(holder:ViewHolder,位置:Int){
持有者绑定(获取项目(位置),mListener)
}
类ViewHolder(itemView:View):RecyclerView.ViewHolder(itemView){
趣味绑定(quote:TblQuote,mListener:onquotesvlistListener){
itemView.txtQuoteRow.text=quote.toString()
itemView.ivDeleteRow.setOnClickListener{mListener.onDeleteQuote(quote)}
itemView.setOnClickListener{mListener.onPrepareForUpdate(引号)}
}
}
类TaskDiffCallback:DiffUtil.ItemCallback(){
覆盖乐趣项相同(旧项:TblQuote,新项:TblQuote):布尔值{
返回oldItem.id==newItem.id
}
覆盖相同的内容(旧项:TblQuote,新项:TblQuote):布尔值{
返回oldItem==newItem
}
}
接口OnQuotesRvListListener{
娱乐节目(ob:TblQuote)
准备更新的乐趣(ob:TBL报价)
}
}

没有访问数据对象的方法,您必须手动维护

class QuotesRvAdapter(val mListener : OnQuotesRvListListener):
        ListAdapter<TblQuote, QuotesRvAdapter.ViewHolder>(TaskDiffCallback())

{
    public YourDataClassName getItemData ( int position)
    {
        return getItem(position)

    }


class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

var myDataObj: YourDataClassName;

fun bind(quote: TblQuote, mListener: OnQuotesRvListListener, myData: YourDataClassName) {
        myDataObj = myData;
        itemView.txtQuoteRow.text = quote.toString()
        itemView.ivDeleteRow.setOnClickListener { mListener.onDeleteQuote(quote) }
        itemView.setOnClickListener{ mListener.onPrepareForUpdate(quote) }
}

}


}
class quotesvadapter(val-mListener:onquotesvlistListener):
ListAdapter(TaskDiffCallback())
{
public YourDataClassName getItemData(int位置)
{
返回项目(位置)
}
类ViewHolder(itemView:View):RecyclerView.ViewHolder(itemView){
var myDataObj:YourDataClassName;
趣味绑定(quote:TblQuote,mListener:onquotesvlistListener,myData:YourDataClassName){
myDataObj=myData;
itemView.txtQuoteRow.text=quote.toString()
itemView.ivDeleteRow.setOnClickListener{mListener.onDeleteQuote(quote)}
itemView.setOnClickListener{mListener.onPrepareForUpdate(引号)}
}
}
}

没有访问数据对象的方法,您必须手动维护

class QuotesRvAdapter(val mListener : OnQuotesRvListListener):
        ListAdapter<TblQuote, QuotesRvAdapter.ViewHolder>(TaskDiffCallback())

{
    public YourDataClassName getItemData ( int position)
    {
        return getItem(position)

    }


class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

var myDataObj: YourDataClassName;

fun bind(quote: TblQuote, mListener: OnQuotesRvListListener, myData: YourDataClassName) {
        myDataObj = myData;
        itemView.txtQuoteRow.text = quote.toString()
        itemView.ivDeleteRow.setOnClickListener { mListener.onDeleteQuote(quote) }
        itemView.setOnClickListener{ mListener.onPrepareForUpdate(quote) }
}

}


}
class quotesvadapter(val-mListener:onquotesvlistListener):
ListAdapter(TaskDiffCallback())
{
public YourDataClassName getItemData(int位置)
{
返回项目(位置)
}
类ViewHolder(itemView:View):RecyclerView.ViewHolder(itemView){
var myDataObj:YourDataClassName;
趣味绑定(quote:TblQuote,mListener:onquotesvlistListener,myData:YourDataClassName){
myDataObj=myData;
itemView.txtQuoteRow.text=quote.toString()
itemView.ivDeleteRow.setOnClickListener{mListener.onDeleteQuote(quote)}
itemView.setOnClickListener{mListener.onPrepareForUpdate(引号)}
}
}
}

您是否尝试了“getAdapterPosition()”?是的,此方法返回int位置,我使用它,但我想通过该位置获取行的obejct,这是问题您是否尝试了“getAdapterPosition()”?是的,此方法返回int位置,我使用它,但我想通过该位置获取行的obejct,这是问题我没有得到它,添加“myDataObj”变量如何帮助像您在适配器类中使用方法getItem(position)这样的人。请利用它。请将您的答案更改为此评论,这样我就可以接受它作为答案,谢谢您无需更改viewHolder,只需有趣的getItemData()完成任务,再次感谢是的,最初我误解了这个问题。我不明白,添加“myDataObj”变量如何帮助像您使用方法getItem(position)这样的人在适配器类中。请利用它。请将您的答案更改为此评论,以便我可以接受它作为答案,谢谢您无需更改viewHolder,只需有趣的getItemData()完成任务,再次感谢是的,最初我误解了这个问题。