Kotlin-cant从RecyclerView适配器替换片段 [英] kotlin-cant replace Fragment from RecyclerView adapter

查看:87
本文介绍了Kotlin-cant从RecyclerView适配器替换片段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

点击后,我的应用程序被终止 而且我不知道在哪里必须输入适配器或中的单击顺序 RecyclerView的片段 Mainadapter.kt

I get Application terminated after click and I don't know where I must type the order of click in adapter or in fragment of RecyclerView Mainadapter.kt

class ContentAdapter(
    private val activity: MainActivity, 
    private var listOfData: ArrayList<MainMarketTickClass>
) : RecyclerView.Adapter<ContentAdapter.ViewHolder>(), View.OnClickListener {
    override fun onClick(v: View?) {
        val manager = activity.supportFragmentManager
        val transaction = manager.beginTransaction()
        val trs = AddCar()
        transaction.add(android.R.id.content, trs, "IndividualBook")
        transaction.addToBackStack(null)
        transaction.commit()
        var heroActivity: MainActivity = activity

    }

    override fun getItemCount(): Int = listOfData.size

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        var inf = ViewHolder(LayoutInflater.from(parent!!.context).inflate(R.layout.maintick, parent, false))
        return inf

    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder!!.bind(listOfData)
        holder.itemView.MainImage.setOnClickListener(this)
    }

    class ViewHolder(itemView: View?) : RecyclerView.ViewHolder(itemView) {
        fun bind(listOfData: ArrayList<MainMarketTickClass>) {
            val dataListin2 = listOfData[adapterPosition]
            itemView.textView.text = dataListin2.title
        }
    }

RecyclerView片段

RecyclerView fragment

class MainMarket : Fragment() {
    var ITEMSList = ArrayList<MainMarketTickClass>()

    companion object {
        fun newInstance(): Fragment {
            var fb: MainMarket = MainMarket()
            return fb
        }
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        var inf = inflater!!.inflate(R.layout.main_marker, container, false)
        return inf
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        ITEMSList.add(MainMarketTickClass("123"))
        ITEMSList.add(MainMarketTickClass(" 123"))
        ITEMSList.add(MainMarketTickClass("123"))

        var adapter = ContentAdapter(MainActivity(), ITEMSList)
        list.adapter = adapter
        list.layoutManager = LinearLayoutManager(this.context, LinearLayoutManager.VERTICAL, false)
    }
}

我在OnClick有趣的致命异常中遇到了一些错误

I hade some errore in OnClick fun FATAL EXCEPTION

推荐答案

我建议您使用与适配器中的单击侦听器事务不同的方法.

I would recommend you to use a different approach than having the on click listener transactions in the Adapter.

这是Adapter

class ContentAdapter constructor(private val activity: MainActivity, private var listOfData: ArrayList<MainMarketTickClass>, val listener: ContentListener) : RecyclerView.Adapter<ContentAdapter.ViewHolder>() {

    override fun getItemCount(): Int = listOfData.size
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        var inf = ViewHolder(LayoutInflater.from(parent!!.context).inflate(R.layout.maintick, parent, false))
        return inf

    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.bind(listOfData, listener)
    }

    class ViewHolder(itemView: View?) : RecyclerView.ViewHolder(itemView) {

        fun bind(listOfData: ArrayList<MainMarketTickClass>, listener: ContentListener) {
            val dataListin2 = listOfData[adapterPosition]

            itemView.textView.text = dataListin2.title

            // this is the click listener. It calls the onItemClicked interface method implemented in the Activity
            itemView.setOnClickListener {
                listener.onItemClicked(listOfData.get(adapterPosition))
            }
        }
    }

    public interface ContentListener {
        fun onItemClicked(item: MainMarketTickClass)
    }

}

这是MainActivity

class MainMarket: Fragment(), ContentAdapter.ContentListener {

var ITEMSList = ArrayList<MainMarketTickClass>()

companion object {
   fun newInstance():Fragment{

       var fb : MainMarket = MainMarket()
       return fb
   }
}


override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    var inf = inflater!!.inflate(R.layout.main_marker,container,false)
    return inf
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {

    ITEMSList .add ( MainMarketTickClass("123"))
    ITEMSList .add ( MainMarketTickClass(" 123"))
    ITEMSList .add ( MainMarketTickClass("123"))

  var adapter = ContentAdapter (MainActivity(),ITEMSList)
    list.adapter = adapter
    list.layoutManager = LinearLayoutManager(this.context,LinearLayoutManager.VERTICAL,false)

}

override onItemClicked(item: MainMarketTickClass) {
// this method gets executed everytime an item gets clicked. You should 
// delegate the fragment transactions to the activity that hosts the fragment. 
// You should not do a fragment transaction from inside the fragment.
// You can use a similar interface approach to contact the activity from the Fragment.

}

这篇关于Kotlin-cant从RecyclerView适配器替换片段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆