【发布时间】:2019-03-18 18:53:10
【问题描述】:
我是新的 android 学习者,我正在尝试制作一个 RecyclerView 包含列表(故事标题和故事图片)。 当您单击 RecyclerView 中的一个项目时,它应该打开一个名为 ChildrenStoriesPreview 的新活动,其中包含 ScrollView,其中有 ImageView 可以将 Story Image 放入它和 TextView 将故事的文本放入其中。 问题是我不知道如何设置 ocItemClickListener 以了解单击了哪个项目以及新活动将如何包含取决于该项目的信息?你能帮帮我吗?
这是我的 Main.kt
class MainChildrenStories : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main_children_stories)
var childrenStoriesArraylist = ArrayList<ChildrenStoriesRecyclerView>()
childrenStoriesArraylist.add(ChildrenStoriesRecyclerView("Story1", R.drawable.pic1))
childrenStoriesArraylist.add(ChildrenStoriesRecyclerView("Story2", R.drawable.pic2))
childrenStoriesArraylist.add(ChildrenStoriesRecyclerView("Story3", R.drawable.pic3))
children_stories_recyclerview.layoutManager = LinearLayoutManager(this, LinearLayout.VERTICAL, false)
val childrenStoriesAdapter = ChildrenStoriesAdapter(childrenStoriesArraylist)
children_stories_recyclerview.adapter = childrenStoriesAdapter
childrenStoriesAdapter.setOnItemClickListener(object : ChildrenStoriesAdapter.ClickListener {
override fun onClick(pos: Int, aView: View) {
//The App Crash here
if (pos == 0){
my_text_view.text = "Story number 1"
my_imageview.setImageResource(R.drawable.pic1)
}else if (pos == 1){
my_text_view.text = "Story number 2"
my_imageview.setImageResource(R.drawable.pic2)
}
val intent = Intent(this@MainChildrenStories, ChildrenStoryPreview::class.java)
startActivity(intent)
}
})
}
}
MyRecyclerView 类
data class ChildrenStoriesRecyclerView(var mStoryName: String, var mStoryImage: Int)
我的 RecyclerView 适配器类
class ChildrenStoriesAdapter(var myArrayList: ArrayList<ChildrenStoriesRecyclerView>) :
RecyclerView.Adapter<ChildrenStoriesAdapter.ViewHolder>() {
lateinit var mClickListener: ClickListener
fun setOnItemClickListener(aClickListener: ClickListener) {
mClickListener = aClickListener
}
override fun onCreateViewHolder(p0: ViewGroup, p1: Int): ViewHolder {
val v = LayoutInflater.from(p0.context).inflate(R.layout.children_stories_list, p0, false)
return ViewHolder(v)
}
override fun getItemCount(): Int {
return myArrayList.size
}
override fun onBindViewHolder(p0: ViewHolder, p1: Int) {
var infList = myArrayList[p1]
p0.storyName.text = infList.mStoryName
p0.storyImage.setImageResource(infList.mStoryImage)
}
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), View.OnClickListener {
override fun onClick(v: View) {
mClickListener.onClick(adapterPosition, v)
}
val storyName = itemView.findViewById(R.id.txtStoryName) as TextView
val storyImage = itemView.findViewById(R.id.imageViewChildrenStories) as ImageView
init {
itemView.setOnClickListener(this)
}
}
interface ClickListener {
fun onClick(pos: Int, aView: View)
}
}
我的新活动显示故事的详细信息
class ChildrenStoryPreview : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_children_story_preview)
}
}
【问题讨论】:
-
这个问题可能重复Click Listener
-
@BhoominNaik 谢谢你的帮助。我根据您的回答更新了上面的代码,我仍然有一个问题,当我使用
if (pos == 0){ my_text_view.text = "Story number 1" my_imageview.setImageResource(R.drawable.pic1) }时应用程序崩溃,但是当我删除这部分代码时它可以工作,但是新活动将具有相同的图片和文本所有位置,如何更改ChildrenStoryPreview Activity 中的文字和图片? -
最后我通过使用
intent.putExtra("Key", pos)将位置发送到另一个活动并在另一个活动中解决了这个问题,我使用了 if 语句来更改文本并且它起作用了。谢谢Bhoomin
标签: kotlin android-recyclerview