Это мой Post.kt
класс
data class Post ( val id: Int, val name: String?, val slug: String?,
val image: String?, val body: String?, val icon: String?,
val quote: String?, val video: String?, val created_at: String?,
val updated_at: String?
)
Мне нужно получить val slug
в своем намерении адаптера, чтобы я мог отправить его на другой вид деятельности
Adapter
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var textView: TextView
var aImage: ImageView
init {
textView = itemView.findViewById(R.id.text_name)
aImage = itemView.findViewById(R.id.a_image)
aImage.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View?) {
val intent = Intent(aImage.context, ArticlesDetail::class.java)
intent.putExtra("my_slug",text_slug.text.toString()) //here
aImage.context.startActivity(intent)
Log.e("Click", "you click on = $adapterPosition")
}
})
}
}
Примечание: text_slug.text.toString()
не существует, это просто заполнитель, мне нужно предоставить val slug
вместо text_slug
. Это то, что я ищу.
Есть идеи?
Обновление
Полный код моего адаптера + приведенный ниже ответ
class MyPostsRecyclerViewAdapter(val posts : ArrayList<Post>) : RecyclerView.Adapter<MyPostsRecyclerViewAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view: View = LayoutInflater.from(parent.context).inflate(R.layout.fragment_posts, parent, false)
return ViewHolder(view)
}
override fun getItemCount(): Int {
return posts.size
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.textView.text = posts.get(position).name
holder.bind(this.posts[position]) //added
Glide.with(holder.aImage.context)
.load(posts.get(position).image)
.placeholder(R.drawable.placeholder2)
.error(R.drawable.placeholder2)
.fallback(R.drawable.placeholder2)
.into(holder.aImage)
}
class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var textView: TextView
var aImage: ImageView
init {
textView = itemView.findViewById(R.id.text_name)
aImage = itemView.findViewById(R.id.a_image)
}
// added
fun bind(post:Post){
textView.text = post.slug?:""
aImage.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View?) {
val intent = Intent(aImage.context, ArticlesDetail::class.java)
intent.putExtra("my_slug",post.slug?:"") // <<---
aImage.context.startActivity(intent)
Log.d("my slug is:", post.slug)
Log.e("Click", "you click on = $adapterPosition")
}
})
}
}
}
В результате этого кода приложение завершилось с ошибкой (закрыто с этой ошибкой my.app.name has stopped
)
Обновление 2
Это мой целевой код активности ArticlesDetail
код.
Объяснение Плагин, который я отправил с помощью моего кода намерения выше, приходит к этому действию и получает данные по API-ссылке, основанной на этом слаге.
class ArticlesDetail : AppCompatActivity() {
private lateinit var appBarConfiguration: AppBarConfiguration
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.article_details)
callAPIDemo()
}
// api code
private fun callAPIDemo() {
val mySlugValue: String = intent.getStringExtra("my_slug")
// Instantiate the RequestQueue.
val queue = Volley.newRequestQueue(this)
val url = "https://example.com/api/articles/$mySlugValue"
// Request a string response from the provided URL.
val stringRequest = StringRequest(
Request.Method.GET, url,
Response.Listener<String> { response ->
val list: ArrayList<Post> = ArrayList()
getPosts(response,list)
// here you will have the complete list of data in your "list" variable
posts_list.layoutManager = LinearLayoutManager(this)
Log.d("my list", list.toString())
posts_list.adapter = ArticlesAdapter(list)
},
Response.ErrorListener { error ->
//displaying the error in toast if occurrs
Toast.makeText(applicationContext, error.message, Toast.LENGTH_SHORT)
.show()
})
// Add the request to the RequestQueue.
queue.add(stringRequest)
}
fun getPosts(response: String,list:ArrayList<Post>) {
var jsonObject = JSONObject(response)
val jsonArray = jsonObject.getJSONArray("posts")
for (i in 0 until jsonArray.length()) {
val jsonObject1 = jsonArray.getJSONObject(i)
var listingObject = Post(
jsonObject1.getInt("id"),
jsonObject1.getString("name"),
jsonObject1.getString("slug"),
jsonObject1.getString("image"),
jsonObject1.getString("body"),
jsonObject1.getString("icon"),
jsonObject1.getString("quote"),
jsonObject1.getString("video"),
jsonObject1.getString("created_at"),
jsonObject1.getString("updated_at")
)
list.add(listingObject)
}
}
}
в настоящее время, когда я нажимаю на изображение который должен был привести меня к этой деятельности вместе со значением слага 1047 *
Строка 73 - это строка:
val jsonArray = jsonObject.getJSONArray("posts")