Получать данные от адаптера к DetailsActivity?

#kotlin #android-recyclerview #adapter

#kotlin #android-recyclerview #адаптер

Вопрос:

Я хочу знать, как я могу получать данные из адаптера (recyclerview) в DetailsActivity. Я пробовал много раз, но изображения из recyclerview не отображаются в DetailsActivity. это мой код.

ImageAdapter

 class ImageAdapter (private var items:List<Item>, private val context:Context):
    RecyclerView.Adapter<ImageAdapter.ViewHolder>() {

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

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

override fun onBindViewHolder(holder: ImageAdapter.ViewHolder, position: Int) {
    val item = items[position]
    Picasso.get().load(item.imageUrl).into(holder.imageView)

    holder.imageView.setOnClickListener {

        val intent = Intent(context, DetailsActivity::class.java)
        intent.putExtra("iImages", item.imageUrl)
        context.startActivity(intent)

    }
}

class ViewHolder(view:View):RecyclerView.ViewHolder(view) {
    val imageView : ImageView = view.findViewById(R.id.imageView)

}
  

}

DetailsActivity

 class DetailsActivity : AppCompatActivity() {

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


    val aImageView = intent.getIntExtra("iImages", 0)
    details_image.setImageResource(aImageView)
}
  

}

RecyclerActivity

 class RecyclerActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_recycler)

    val storage = FirebaseStorage.getInstance()
    val storageRef = storage.reference.child("wallpapers")
    val imageList : ArrayList<Item> = ArrayList()
    //progressBar.visibility = View.VISIBLE

    val listAllTask : Task<ListResult> = storageRef.listAll()
    listAllTask.addOnCompleteListener { result ->
        val items: List<StorageReference> = result.result!!.items

        //add cycle for add image url to list
        items.forEachIndexed { index,item ->
            item.downloadUrl.addOnSuccessListener {
                Log.d("item", "$it")
                imageList.add(Item(it.toString()))
            }.addOnCompleteListener {
                recyclerview.adapter = ImageAdapter(imageList, this)
                recyclerview.layoutManager = LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)
                //progressBar.visibility = View.GONE
            }
        }
    }

}
  

}

Элемент класса данных Item( var ImageUrl: String )

Ответ №1:

Проблема в этой строке:

 details_image.setImageResource(aImageView)
  

Вы устанавливаете resource int, но то, что вы передаете, похоже, является URL-адресом, поэтому вместо этого загрузите значение «IImages» с помощью Picasso для этого представления

Редактировать: заменить это:

 val aImageView = intent.getIntExtra("iImages", 0)
details_image.setImageResource(aImageView)
  

с помощью этого

 val retrievedImageUrl = intent.getIntExtra("iImages", 0)
Picasso.get().load(retrievedImageUrl).into(details_image)
  

Комментарии:

1. @Elrik Я отредактировал свой ответ, скажите, решает ли это

2. Спасибо, друг

3. @Elrik Рад, что я смог помочь, если вы можете пометить ответ как решение, пожалуйста

Ответ №2:

Ответ

 val imageView : ImageView = findViewById(R.id.details_image)
    Glide.with(this).load(intent.getStringExtra("iImages")).into(imageView)
  

Комментарии:

1. Будьте более конкретными!