尝试使用 onclick 在回收视图中打开另一个活动
Posted
技术标签:
【中文标题】尝试使用 onclick 在回收视图中打开另一个活动【英文标题】:Trying to open another activity in recycles view using onclick 【发布时间】:2021-10-21 09:39:19 【问题描述】:尝试获取一个按钮以使用 kotlin 在 android studio 中打开另一个活动。我是用户回收视图这样做。我有查看卡并想编辑卡中的数据,因此我是用户 onClick 以使页面响应,但这似乎确实有效,我尝试对其进行研究,但没有任何东西可以理解。这是代码。
感谢您的帮助,我不胜感激
这是适配器类:
```class EventAdapter(var mListener: onItemClickListener, var context: Context, val items: ArrayList<EventModelk>):
RecyclerView.Adapter<EventAdapter.ViewHolder>()
interface onItemClickListener
fun onItemClick(position: Int)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder
val itemview = LayoutInflater.from(context).inflate(
R.layout.eventitems,
parent,
false,
)
return ViewHolder(itemview, mListener)
override fun onBindViewHolder(holder: ViewHolder, position: Int)
val item = items[position]
holder.setEmail.text = item.eEmail
holder.setNotes.text = item.nNotes
holder.setData.text = item.dDate
holder.setTime.text = item.tTime
if (item.repeat == 1)
holder.setReap.isChecked = true
// holder.setReap.text = item.repeat.toString()
if (position % 2 == 0)
holder.main.setBackgroundColor(
ContextCompat.getColor(
context,
R.color.colorLightGray
)
)
else
holder.main.setBackgroundColor(ContextCompat.getColor(context, R.color.colorWhite))
holder.pushimg.setOnClickListener
if (context is UpdateDataInfo)
(context as UpdateDataInfo).updateEvent(item)
// interface onItemClickListener
// fun onItemClick(position: Int)
override fun getItemCount(): Int
return items.size
class ViewHolder(view: View,onItemClickListener: onItemClickListener): RecyclerView.ViewHolder(view),onItemClickListener
val main: CardView = view.IIMain
val setData: TextView = view.set_date
val setTime: TextView = view.set_time
val setEmail: TextView = view.Tv_email
val setNotes: TextView = view.set_note
val setReap: CheckBox =view.is_repeat
val pushimg: ImageView = view.img_edit
val onItemClickListener = onItemClickListener
override fun onItemClick(position: Int)
onItemClickListener.onItemClick(absoluteAdapterPosition)
```
这是我获得点击以转到另一个活动的代码:
class CurrentSch : AppCompatActivity(), EventAdapter.onItemClickListener
//private var change =imageView2?.isClickable
var STORAGE_LOCAL =true
val eventlist = ArrayList<EventModelk>()
@RequiresApi(Build.VERSION_CODES.N)
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.currentsch)
btnNewApp2.setOnClickListener
val intent = Intent(this, NewPlan::class.java)
startActivity(intent)
seeAllEventInPlan()
//private var change =imageView2?.isClickable
private fun getEventist(): ArrayList<EventModelk>
val eventdatabase = EventDatabasek(this)
return eventdatabase.veiwEvent()
fun seeAllEventInPlan() = if(getEventist().size >0)
ryc_eventLists.visibility = View.VISIBLE
viewnotview.visibility = View.GONE
ryc_eventLists.layoutManager = LinearLayoutManager(this)
val eventAdapter = EventAdapter(this,this, getEventist())
ryc_eventLists.adapter = eventAdapter
else
ryc_eventLists.visibility = View.GONE
viewnotview.visibility = View.VISIBLE
override fun onItemClick(position: Int)
val item = eventlist[position]
img_edit.setOnClickListener
val intent = Intent(this, UpdateDataInfo::class.java)
intent.putExtra("Events", position)
startActivity(intent)
【问题讨论】:
好吧,一切都已经很完美了,但是您将位置传递给意图将位置 int 更改为模型类。这仅在模型类可序列化或可打包时执行。 【参考方案1】:在onBindViewHolder
函数中,只需调用mListener.onItemClick(position)
,例如,如果您想在点击setData
时打开另一个Activity
,那么您可以在onBindViewHolder
中编写以下代码
holder.setData.setOnClickListener mListener.onItemClick(position)
【讨论】:
这将如何帮助打开我想要访问的页面或活动?该程序刚刚关闭,没有错误。 @mightyWOZ【参考方案2】:根据您上面的代码,您已经在调用适配器的地方进行了回调,您将在那里得到回调,并且您将在那里打开一个活动..但是您可以像这样简单地从适配器打开您的新活动..
holder.itemView.setOnClickListener(View.OnClickListener
val intent = Intent (context,SomeActivity::class.java)
context.startactivity(intent)
)
【讨论】:
以上是关于尝试使用 onclick 在回收视图中打开另一个活动的主要内容,如果未能解决你的问题,请参考以下文章
如何从回收站视图 android 中传递一个 url onclick 项目并 onclick 获取位置 dipaly 在另一个活动中的 url