努力在我的回收站视图之外访问 Spinner

Struggling to access Spinner outside of my recycler view

我尝试了两种不同的方式来访问我的微调器。到目前为止没有成功。 我想为每个选择的驱动程序加载数据。

了解一下我的应用程序。

适配器代码:



class TableViewAdapter(var tripsheetlist: Tripsheetlist) : RecyclerView.Adapter<TableViewAdapter.RowViewHolder>() {


    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RowViewHolder {
        val itemView = LayoutInflater.from(parent.context).inflate(R.layout.table_list_item, parent, false)
        return RowViewHolder(itemView) }

    override fun getItemCount(): Int { return tripsheetlist.videos.size + 1 // one more to add header row
    }

    override fun onBindViewHolder(holder: RowViewHolder, position: Int) {

        val rowPos = holder.adapterPosition


        if (rowPos == 0) {
            // Header Cells. Main Headings appear here
            holder.itemView.apply {
                setHeaderBg(txtWOrder)
                setHeaderBg(txtDElNote)
                setHeaderBg(txtCompany)
              //  setHeaderBg(txtAddress)
                setHeaderBg(txtWeight)
               setHeaderBg(txtbutton1)
                setHeaderBg(txtbutton2)
                setHeaderBg(txttvdone)

                txtWOrder.text = "WOrder"
                txtDElNote.text = "DElNote"
                txtCompany.text = "Company"
               // txtAddress.text = "Address"
                txtWeight.text = "Weight"
                txtbutton1.text = "Delivered"
                txtbutton2.text = "Exception"
                txttvdone.text = ""
            }
        } else {
            val modal = tripsheetlist.videos[rowPos -1]

            holder.itemView.apply {
                setContentBg(txtWOrder)
                setContentBg(txtDElNote)
                setContentBg(txtCompany)
                setContentBg(txtWeight)
                setContentBg(txtbutton1)
                setContentBg(txtbutton2)
                setContentBg(txttvdone)

                val list : MutableList<String> = ArrayList()
                list.add("Deon")
                list.add("Leon")
                list.add("David")
                list.add("Dick")
                println(list)
                val spinner : Spinner = findViewById(R.id.spnDriver)


                spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
                    override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
                        val item :String = list[p2]


                        if (item == "David")

                        {
                            txtWOrder.text = modal.WOrder.toString()
                            txtDElNote.text = modal.DElNote.toString()
                            txtCompany.text = modal.name.toString()
                            txtWeight.text = modal.id.toString()
                        }
                    }

                    override fun onNothingSelected(p0: AdapterView<*>?) {
                    }
                }




我是这样做的,暂时作为测试。因为我将从 JSON 获取驱动程序。我还没有访问它的权限,所以这就是静态值的原因。 我现在遇到的问题是:findViewById(R.id.spnDriver) must not be null

我首先在我的主 activity 中安装了我的微调器 class 并像这样传递它:


        val list : MutableList<String> = ArrayList()
        list.add("Deon")
        list.add("Leon")
        list.add("David")
        list.add("Dick")
        list.add("Jim")
        list.add("Harry")
        val adapter = ArrayAdapter( this, androidx.appcompat.R.layout.support_simple_spinner_dropdown_item, list)
        val spinner: Spinner = findViewById(R.id.spnDriver)
        spinner.adapter = adapter
        spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
            override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
                val item :String = list[p2]
                Toast.makeText(this@MainActivity, "Driver $item selected", Toast.LENGTH_SHORT).show()
            }

            override fun onNothingSelected(p0: AdapterView<*>?) {
                //empty
            }

          //  insert code that activates data pull of tripsheet for driver= actifavte by method the class/object that activates the data pull. so datapuul(Driver)
                }
        limitDropDownHeight(spinner)
 //drivers end


        val btnLoadData: Button = findViewById(R.id.btnLoadData)



//        weightsum(tvTotalweight, Tripsheetlist)
//        totaldelNotes(tvTotaldelv,Tripsheetlist)
     //   setData(btnLoadData, Tripsheetlist )

        fetchJson(spinner)

    }

    private fun fetchJson(spinner: Spinner) {

        println("Attempting to Fetch JSON")

        val url = "https://api.letsbuildthatapp.com/youtube/home_feed"

        val request = Request.Builder().url(url).build()

        val client = OkHttpClient()
        client.newCall(request).enqueue(object: Callback {


            override fun onFailure(call: Call, e: IOException) {
                println("Failed to execute request")            }

            override fun onResponse(call: Call, response: Response) {
                val body = response.body?.string()
                println(body)

                val gson = GsonBuilder().create()

                val tripsheetlist = gson.fromJson(body, Tripsheetlist::class.java)

                runOnUiThread {
                    recyclerViewTripsheetlist.adapter = TableViewAdapter(tripsheetlist, spinner)
                }
            }
        })
    } 

在我的适配器中 class 然后我调用它: val spinner = spnDriver 这导致了一个不同的错误:AppCompatSpinner.setOnItemSelectedListener(android.widget.AdapterView$OnItemSelectedListener)' on a null object reference 但似乎它顺利通过了 val spinner =spnDriver

感谢您的所有意见和帮助。

我找到了解决办法。我所做的是将微调器保留在我的 MainActivity 中,然后将微调器的结果传递给适配器——我想在其中使用它。