Android 如何使用recycleview创建多个按钮

Android 如何使用recycleview创建多个按钮,android,android-studio,Android,Android Studio,我的应用程序使用recycleview显示多个ImageButton,一切正常,我想要的是,当一个人单击ImageButton时,他们将被定向到活动“monactivitefinal”,并保留“article.ifram”的内容,以便我在这个新活动中使用它。 所有Imagebutton重定向到同一个活动“monactivitefinal”,只有变量“article.ifram”发生更改 这是我的代码: class Article(var id: Int, var nom: String, var

我的应用程序使用recycleview显示多个ImageButton,一切正常,我想要的是,当一个人单击ImageButton时,他们将被定向到活动“monactivitefinal”,并保留“article.ifram”的内容,以便我在这个新活动中使用它。 所有Imagebutton重定向到同一个活动“monactivitefinal”,只有变量“article.ifram”发生更改

这是我的代码:

class Article(var id: Int, var nom: String, var lienimg: String, var ifram: String){
}

class ArticleAdapter(var articles: ArrayList<Article>) : RecyclerView.Adapter<ArticleAdapter.MyViewHolder>(){
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        var vue=LayoutInflater.from(parent.context).inflate(
            R.layout.listevisitess,
            parent,
            false
        )
        return MyViewHolder(vue)
    }
    override fun getItemCount(): Int {
        return articles.size
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        var article = articles.get(position)
        holder.nomvisite.setText(article.nom)
        holder.lieimgvisite.setText(article.lienimg)
        holder.ifram.setText(article.ifram)

        var urldelimg:String = article.lienimg 
        Glide.with(holder.imagedubloc.context).load(urldelimg).into(holder.imagedubloc) 


    }

    class MyViewHolder(var vue: View):RecyclerView.ViewHolder(vue){
        var nomvisite=vue.findViewById<TextView>(R.id.nom_visite)
        var lieimgvisite=vue.findViewById<TextView>(R.id.lienimg)
        var ifram=vue.findViewById<TextView>(R.id.ifram)
        var imagedubloc=vue.findViewById<ImageView>(R.id.imagedubloc) 
    }


}
类文章(var-id:Int,var-nom:String,var-lienimg:String,var-ifram:String){
}
类ArticleAdapter(var articles:ArrayList):RecyclerView.Adapter(){
重写CreateViewHolder(父级:ViewGroup,viewType:Int):MyViewHolder{
var vue=LayoutInflater.from(parent.context).充气(
R.layout.listedvisitess,
父母亲
假的
)
返回MyViewHolder(vue)
}
重写getItemCount():Int{
退货物品.尺码
}
覆盖onBindViewHolder(holder:MyViewHolder,位置:Int){
var article=articles.get(位置)
holder.nomvisite.setText(article.nom)
holder.lieimgvisite.setText(第条留置权)
holder.ifram.setText(article.ifram)
var urldelimg:String=article.lieimg
使用(holder.imagedubloc.context)滑动。加载(urldelimg)。放入(holder.imagedubloc)
}
类MyViewHolder(变量vue:View):RecyclerView.ViewHolder(vue){
var nomvisite=vue.findViewById(R.id.nom_visite)
var lieimgvisite=vue.findViewById(R.id.lienimg)
变量ifram=vue.findViewById(R.id.ifram)
var imagedubloc=vue.findViewById(R.id.imagedubloc)
}
}



谢谢

您可以在您的
意图中传递一个用于导航到新活动的额外字段,您的代码如下:

class ArticleAdapter(var articles: ArrayList<Article>) : RecyclerView.Adapter<ArticleAdapter.MyViewHolder>(){
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        var vue=LayoutInflater.from(parent.context).inflate(
            R.layout.listevisitess,
            parent,
            false
        )
        return MyViewHolder(vue)
    }
    override fun getItemCount(): Int {
        return articles.size
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        var article = articles.get(position)
        holder.nomvisite.setText(article.nom)
        holder.lieimgvisite.setText(article.lienimg)
        holder.ifram.setText(article.ifram)

        var urldelimg:String = article.lienimg 
        Glide.with(holder.imagedubloc.context).load(urldelimg).into(holder.imagedubloc) 

        // here you pass your "ifram" value to the activity you're navigating to
        holder.imagedubloc.setOnClickListener {
            startActivity(Intent(holder.vue.context,monactivitefinal::class.java).apply {
                putExtra("ifram", article.ifram)
            })
        }

    }

    class MyViewHolder(var vue: View):RecyclerView.ViewHolder(vue){
        var nomvisite=vue.findViewById<TextView>(R.id.nom_visite)
        var lieimgvisite=vue.findViewById<TextView>(R.id.lienimg)
        var ifram=vue.findViewById<TextView>(R.id.ifram)
        var imagedubloc=vue.findViewById<ImageView>(R.id.imagedubloc) 
    }


}

您可以在
Intent
中传递一个用于导航到新活动的额外字段,您的代码如下:

class ArticleAdapter(var articles: ArrayList<Article>) : RecyclerView.Adapter<ArticleAdapter.MyViewHolder>(){
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        var vue=LayoutInflater.from(parent.context).inflate(
            R.layout.listevisitess,
            parent,
            false
        )
        return MyViewHolder(vue)
    }
    override fun getItemCount(): Int {
        return articles.size
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        var article = articles.get(position)
        holder.nomvisite.setText(article.nom)
        holder.lieimgvisite.setText(article.lienimg)
        holder.ifram.setText(article.ifram)

        var urldelimg:String = article.lienimg 
        Glide.with(holder.imagedubloc.context).load(urldelimg).into(holder.imagedubloc) 

        // here you pass your "ifram" value to the activity you're navigating to
        holder.imagedubloc.setOnClickListener {
            startActivity(Intent(holder.vue.context,monactivitefinal::class.java).apply {
                putExtra("ifram", article.ifram)
            })
        }

    }

    class MyViewHolder(var vue: View):RecyclerView.ViewHolder(vue){
        var nomvisite=vue.findViewById<TextView>(R.id.nom_visite)
        var lieimgvisite=vue.findViewById<TextView>(R.id.lienimg)
        var ifram=vue.findViewById<TextView>(R.id.ifram)
        var imagedubloc=vue.findViewById<ImageView>(R.id.imagedubloc) 
    }


}

您需要添加侦听器来处理onClick事件,然后ButtonListActivity需要实现这个接口并像这样初始化适配器

听众

interface ImageButtonClickListener {

    fun onImageButtonClick(articleIfram: String)
}
带有按钮列表的活动

class ButtonListActivity : AppCompactActivity(), ImageButtonClickListener {

    private val adapter: ArticleAdapter = ArticleAdapter(ArrayList(), this)

    override fun onImageButtonClick(articleIfram: String) {
        val intent = Intent(context, Monactivitefinal::class.java)
        intent.putExtra("articleIfram", articleIfram)
        startActivity(intent)
    }
}
class ButtonListActivity : AppCompactActivity(), ImageButtonClickListener {

    private val onImageButtonClick: (String) -> Unit = {
        val intent = Intent(context, Monactivitefinal::class.java)
        intent.putExtra("articleIfram", articleIfram)
        startActivity(intent)
    }

    private val adapter: ArticleAdapter = ArticleAdapter(ArrayList(), onImageButtonClick)
}
你的适配器

class ArticleAdapter(
    val onImageButtonClickListener: ImageButtonClickListener, 
    var articles: ArrayList<Article>
) : RecyclerView.Adapter<ArticleAdapter.MyViewHolder>(){

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        var article = articles.get(position)
        imagedubloc.setOnClickListener {
            onImageButtonClickListener.onImageButtonClick(article. ifram)
        }
    }
}
class ArticleAdapter(
    val onImageButtonClickListener: (String) -> Unit, 
    var articles: ArrayList<Article>
) : RecyclerView.Adapter<ArticleAdapter.MyViewHolder>(){

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        var article = articles.get(position)
        imagedubloc.setOnClickListener {
            onImageButtonClickListener(article. ifram)
        }
    }
}
你的适配器

class ArticleAdapter(
    val onImageButtonClickListener: ImageButtonClickListener, 
    var articles: ArrayList<Article>
) : RecyclerView.Adapter<ArticleAdapter.MyViewHolder>(){

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        var article = articles.get(position)
        imagedubloc.setOnClickListener {
            onImageButtonClickListener.onImageButtonClick(article. ifram)
        }
    }
}
class ArticleAdapter(
    val onImageButtonClickListener: (String) -> Unit, 
    var articles: ArrayList<Article>
) : RecyclerView.Adapter<ArticleAdapter.MyViewHolder>(){

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        var article = articles.get(position)
        imagedubloc.setOnClickListener {
            onImageButtonClickListener(article. ifram)
        }
    }
}
类适配器(
val onImageButtonClickListener:(字符串)->单位,
var文章:ArrayList
):RecyclerView.Adapter(){
覆盖onBindViewHolder(holder:MyViewHolder,位置:Int){
var article=articles.get(位置)
imagedubloc.setOnClickListener{
onImageButtonClickListener(article.ifram)
}
}
}

您需要添加侦听器来处理onClick事件,然后ButtonListActivity需要实现此接口,并像这样初始化适配器

听众

interface ImageButtonClickListener {

    fun onImageButtonClick(articleIfram: String)
}
带有按钮列表的活动

class ButtonListActivity : AppCompactActivity(), ImageButtonClickListener {

    private val adapter: ArticleAdapter = ArticleAdapter(ArrayList(), this)

    override fun onImageButtonClick(articleIfram: String) {
        val intent = Intent(context, Monactivitefinal::class.java)
        intent.putExtra("articleIfram", articleIfram)
        startActivity(intent)
    }
}
class ButtonListActivity : AppCompactActivity(), ImageButtonClickListener {

    private val onImageButtonClick: (String) -> Unit = {
        val intent = Intent(context, Monactivitefinal::class.java)
        intent.putExtra("articleIfram", articleIfram)
        startActivity(intent)
    }

    private val adapter: ArticleAdapter = ArticleAdapter(ArrayList(), onImageButtonClick)
}
你的适配器

class ArticleAdapter(
    val onImageButtonClickListener: ImageButtonClickListener, 
    var articles: ArrayList<Article>
) : RecyclerView.Adapter<ArticleAdapter.MyViewHolder>(){

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        var article = articles.get(position)
        imagedubloc.setOnClickListener {
            onImageButtonClickListener.onImageButtonClick(article. ifram)
        }
    }
}
class ArticleAdapter(
    val onImageButtonClickListener: (String) -> Unit, 
    var articles: ArrayList<Article>
) : RecyclerView.Adapter<ArticleAdapter.MyViewHolder>(){

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        var article = articles.get(position)
        imagedubloc.setOnClickListener {
            onImageButtonClickListener(article. ifram)
        }
    }
}
你的适配器

class ArticleAdapter(
    val onImageButtonClickListener: ImageButtonClickListener, 
    var articles: ArrayList<Article>
) : RecyclerView.Adapter<ArticleAdapter.MyViewHolder>(){

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        var article = articles.get(position)
        imagedubloc.setOnClickListener {
            onImageButtonClickListener.onImageButtonClick(article. ifram)
        }
    }
}
class ArticleAdapter(
    val onImageButtonClickListener: (String) -> Unit, 
    var articles: ArrayList<Article>
) : RecyclerView.Adapter<ArticleAdapter.MyViewHolder>(){

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        var article = articles.get(position)
        imagedubloc.setOnClickListener {
            onImageButtonClickListener(article. ifram)
        }
    }
}
类适配器(
val onImageButtonClickListener:(字符串)->单位,
var文章:ArrayList
):RecyclerView.Adapter(){
覆盖onBindViewHolder(holder:MyViewHolder,位置:Int){
var article=articles.get(位置)
imagedubloc.setOnClickListener{
onImageButtonClickListener(article.ifram)
}
}
}

谢谢,但我有一个错误:分类器“Context”没有伴随对象,因此必须在此处初始化,如果我使用:startActivity(holder.vue.Context,Intent(holder.imagedubloc.Context,monactivitefinal::class.java)。apply我有这个错误(在同一行中):没有为参数“p2”传递值非常抱歉,我的代码中有一个“输入错误”,我将其编辑如下:
startActivity(Intent(holder.vue.context,monactivitefinal::class.java)。apply{putExtra(“ifram”,article.ifram)})
@admindunetthankyou,但我有一个错误:分类器“Context”没有伴随对象,因此必须在此处初始化,如果我使用:startActivity(holder.vue.Context,Intent(holder.imagedubloc.Context,monactivitefinal::class.java)。apply我有这个错误(在同一行中):没有为参数“p2”传递值非常抱歉,我的代码中有一个“输入错误”,我将其编辑如下:
startActivity(Intent(holder.vue.context,monactivitefinal::class.java)