[英]How can I click on a RecyclerView item to go to detailed activity and apply the title and price of the item in the RecyclerView that I clicked?
I have Recyclerview
items in MainActivity
.我在
MainActivity
有Recyclerview
项目。
When I click recyclerview
item in mainactivity
, go to detailactivity
.当我单击
mainactivity
recyclerview
项时,转到detailactivity
。 And then I want apply the titleText
and price of the item(realValueText) in the recyclerview
that i clicked in detailactivity
.然后我想在我在
detailactivity
单击的recyclerview
中应用 item(realValueText) 的titleText
和价格。 How can I do ?我能怎么做 ? Lets see
acitivity
and adapter
.让我们看看
acitivity
和adapter
。
and u can see detailactivity
.你可以看到
detailactivity
。 finally I want make details view,最后我想查看详细信息,
productTitle==titleText , productPoint==realValueText.
MainFragment主片段
class MainFragment: Fragment(), SwipeRefreshLayout.OnRefreshListener {
var itemList: MutableList<ItemDataVo> = arrayListOf()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? { return inflater!!.inflate(R.layout.fragmenta, container, false)}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
itemList.clear()
swipeRefreshLo.setOnRefreshListener(this)
itemList.add(ItemDataVo("item1", 49000, 29000, "r_300_x_300_3"))
itemList.add(ItemDataVo("item2", 49000, 29000, "main_cup"))
itemList.add(ItemDataVo("item3", 49000, 29000, "main_perfume"))
itemList.add(ItemDataVo("item4", 49000, 29000, "main_fan"))
itemList.add(ItemDataVo("item5", 49000, 29000, "main_bear"))
itemList.add(ItemDataVo("item6", 49000, 29000, "main_glass"))
val itemRecyclerAdapter= ItemRecyclerAdapter(context!!,itemList)
recycler_view.adapter=itemRecyclerAdapter
recycler_view.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(context)
}
override fun onRefresh() {
swipeRefreshLo.isRefreshing = false
}
}
ItemDataVo项目数据Vo
class ItemDataVo(title: String, realValue: Int, pointValue: Int, imageView: String, viewType: Int = 0) {
var viewType = viewType
var title :String = title
var realValue:Int = realValue
var pointValue:Int =pointValue
var image :String = imageView
}
ItemRecyclerAdapter ItemRecyclerAdapter
class ItemRecyclerAdapter(val context: Context, private var dataList: MutableList<ItemDataVo>) : RecyclerView.Adapter<ItemRecyclerAdapter.Holder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): Holder {
val view = LayoutInflater.from(context).inflate(R.layout.item_1_col_list, parent, false)
return Holder(view)
}
override fun onBindViewHolder(holder: Holder, position: Int) {
holder?.bind(dataList[position],context)
}
override fun getItemCount(): Int = dataList.size
override fun getItemViewType(position: Int): Int = dataList[position].viewType
inner class Holder(itemView: View?) : RecyclerView.ViewHolder(itemView!!) {
var titleText = itemView?.findViewById(R.id.titleText) as TextView
var realValueText = itemView?.findViewById(R.id.realValueText) as TextView
var pointValueText = itemView?.findViewById(R.id.pointValueText) as TextView
var imageView = itemView?.findViewById(R.id.imageView)as ImageView
var itemLayout = itemView?.findViewById(R.id.item_layout) as ConstraintLayout
fun bind(data:ItemDataVo, context: Context) {
if(data.image !="") {
val resourceId = context.resources.getIdentifier(data.image, "drawable", context.packageName)
imageView?.setImageResource(resourceId)
}else {
imageView?.setImageResource(R.mipmap.ic_launcher)
}
pointValueText?.text=data.pointValue.toString() + "P"
realValueText?.text=data.realValue.toString()
titleText?.text=data.title
itemLayout?.setOnClickListener {
val i = Intent(it.context, DetailItemViewActivity::class.java)
it.context.startActivity(i)
}
}
}
}
DetailItemViewActivity DetailItemViewActivity
class DetailItemViewActivity : AppCompatActivity(), SwipeRefreshLayout.OnRefreshListener {
var Detailslist: MutableList<DetailItemDataVo> = arrayListOf()
@SuppressLint("ResourceType")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_details)
var productTitle = findViewById<TextView>(R.id.productTitle)
var productpoint = findViewById<TextView>(R.id.productPoint)
The proper way to do this is to let your activity or fragment which holds the recycler view to open the details screen.执行此操作的正确方法是让您的 Activity 或 Fragment 包含回收器视图以打开详细信息屏幕。
Set a onClick
listener in the viewholder or in any individual view if the recycler item.如果是回收项,则在查看器或任何单个视图中设置
onClick
侦听器。 When that view is clicked, send a callback to your parent activity.单击该视图后,向您的父活动发送回调。 Send the model which was clicked inside the listener callback.
发送在侦听器回调中单击的模型。
Your activity will get this callback and open the relevant activity.您的活动将获得此回调并打开相关活动。
This way your recycler adapter wont have the reference of the details screen.这样您的回收器适配器将不会有详细信息屏幕的参考。
Create an Interface like this创建一个这样的接口
public interface ClickInterface {
public void recyclerviewOnClick(int position);
}
Implement it in your Fragment and initialize the interface在你的 Fragment 中实现它并初始化接口
YourFragment extends Fragment implements ClickInterface{
private ClickInterface listner;
------- Your oncreateView --------
listner=this; //Now pass this in your adapter
}
In your adapter constructor get this listner like this在您的适配器构造函数中,像这样获取此侦听器
public MyAdapter(String[] myDataset,ClickInterface listner){
this.mDataset = myDataset;
this.listner=listner;
}
and at last in your ViewHolder最后在你的 ViewHolder
public class MyViewHolder extends RecyclerView.ViewHolder{
public MyViewHolder(View v){
super(v);
itemLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listner.recyclerviewOnClick(getAdapterPosition());
}
});
}
}
Now you will get the position in your fragment in现在您将获得片段中的位置
public void recyclerviewOnClick(int position){
// Here you will get the position
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.