简体   繁体   English

如何单击 RecyclerView 项目以转到详细活动并在我单击的 RecyclerView 中应用项目的标题和价格?

[英]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 .我在MainActivityRecyclerview项目。

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 .让我们看看acitivityadapter

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.

相关问题 当我单击 RecyclerView 项目时,我希望 TextView 在同一活动中显示项目的标题 - When I click on RecyclerView Item I want the TextView in same activity to display Item's title 如何单击 recyclerView 的一个项目并转到另一个包含所单击项目详细信息的 recyclerView? - How to click an item of recyclerView and go to another recyclerView that contains the details of the clicked item? 如何在 recyclerView 中获取单击项目的适配器位置 - How can i get the adapter Position of the clicked item in recyclerView 如何访问片段内单击的 RecyclerView 项目 position? - How can I access clicked RecyclerView item position inside fragment? 如何解决单击水平 RecyclerView 中的项目的问题? - How can I solve a problem with click on item in horizontal RecyclerView? 如何从 RecyclerView 对 CardView 项目进行点击事件 - How can I make click event on CardView Item from RecyclerView 当我单击 recyclerView 中的项目时打开特定活动 - Open an specific activity when I click an item from an recyclerView 单击该物品后如何从recyclerview中显示该物品的详细信息 - How can I display item's details from a recyclerview when the item is clicked 当我点击一个recyclerview项目时,如何从一个片段移动到一个新的活动? - how to move from a fragment to a new activity when i clicked an item of recyclerview? 如何在另一个RecyclerView的项目中实现RecyclerView - How can I implement a RecyclerView inside another RecyclerView's item
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM