E / RecyclerView:未连接适配器;跳过布局-错误

时间:2020-07-07 05:50:50

标签: android-recyclerview

获取E / RecyclerView:未连接适配器;跳过布局错误。我该怎么办?

活动文件

RestaurantMenuActivity类:AppCompatActivity(){

lateinit var recyclerMenu: RecyclerView
lateinit var progressBar: ProgressBar
lateinit var progressLayout: RelativeLayout
lateinit var layoutManager: RecyclerView.LayoutManager
lateinit var sharedPreferences: SharedPreferences
lateinit var menuLayout: RelativeLayout
lateinit var btnProceedToCart: Button

val menuInfoList= arrayListOf<Menu>()
var orderList = ArrayList<Menu>()


lateinit var recyclerAdapter: MenuRecyclerAdapter

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_restaurant_menu)

    sharedPreferences =
        getSharedPreferences(getString(R.string.preferences_login), Context.MODE_PRIVATE)

    recyclerMenu = findViewById(R.id.recyclerMenu)
    progressBar = findViewById(R.id.progressBar)
    progressLayout = findViewById(R.id.progressLayout)
    layoutManager = LinearLayoutManager(this@RestaurantMenuActivity)
    btnProceedToCart = findViewById(R.id.btnProceedToCart)
    menuLayout = findViewById(R.id.menuLayout)

    progressLayout.visibility = View.VISIBLE
    val resInfo = intent.getBundleExtra("resInfo")
    val resId = resInfo?.getInt("id",0)
    val resName = resInfo?.getString("name","")

    val queue = Volley.newRequestQueue(this@RestaurantMenuActivity)
    if (ConnectionManager().isNetworkAvailable(this@RestaurantMenuActivity)) {
        val url = "http://xxxxxxxxxxxx/v2/restaurants/fetch_result/$resId"
        val jsonObjectRequest = object : JsonObjectRequest(
            Method.GET,
            url,
            null,
            Response.Listener {
                try {
                    val data = it.getJSONObject("data")
                    val success = data.getBoolean("success")
                    if (success) {
                        progressBar.visibility = View.GONE
                        progressLayout.visibility = View.GONE
                        val resMenuArray = data.getJSONArray("data")
                        for (i in 0 until resMenuArray.length()) {
                            val restaurantJsonObject = resMenuArray.getJSONObject(i)
                            val resDetailObject = Menu(
                                id=restaurantJsonObject.getString("id").toInt(),
                                name=restaurantJsonObject.getString("name"),
                                cpp=restaurantJsonObject.getString("cost_for_one")
                            )
                            menuInfoList.add(resDetailObject)

                            recyclerAdapter =
                                MenuRecyclerAdapter(
                                    this@RestaurantMenuActivity,
                                    menuInfoList,
                                    object : MenuRecyclerAdapter.onItemClickListener {
                                        override fun onAddItemClick(orderDetail: Menu) {

                                            orderList.add(resDetailObject)
                                            if (orderList.size > 0) {
                                                btnProceedToCart.visibility = View.VISIBLE
                                                MenuRecyclerAdapter.isCartEmpty =
                                                    false
                                            }
                                        }

                                        override fun onRemoveItemClick(orderDetail: Menu) {
                                            orderList.remove(resDetailObject)
                                            if (orderList.isEmpty()) {
                                                btnProceedToCart.visibility = View.GONE
                                                MenuRecyclerAdapter.isCartEmpty = true
                                            }
                                        }
                                    }
                                )
                            recyclerMenu.adapter = recyclerAdapter
                            recyclerMenu.itemAnimator = DefaultItemAnimator()
                            recyclerMenu.layoutManager = layoutManager
                        }
                    } else {
                        Toast.makeText(
                            this,
                            "Some Error Occured!!!",
                            Toast.LENGTH_SHORT
                        ).show()
                    }
                } catch (e: JSONException) {
                    Toast.makeText(
                        this,
                        "Some unexpected Error Occured",
                        Toast.LENGTH_SHORT
                    ).show()
                }
            },
            Response.ErrorListener {
                Toast.makeText(
                    this,
                    "Volley Error Occured",
                    Toast.LENGTH_SHORT
                )
                    .show()
            }) {
            override fun getHeaders(): MutableMap<String, String> {
                val headers = HashMap<String, String>()
                headers["Content-type"] = "application/json"
                headers["token"] = "xxxxxxxxxxxxx"
                return headers
            }
        }
        queue.add(jsonObjectRequest)
    } else {
        val dialog = AlertDialog.Builder(this)
        dialog.setTitle("Error")
        dialog.setMessage("Internet Connection is not Found")
        dialog.setPositiveButton("Open Settings") { text, listener ->
            val settingsIntent = Intent(Settings.ACTION_WIRELESS_SETTINGS)
            startActivity(settingsIntent)

        }
        dialog.setNegativeButton("Exit") { text, listener ->
            ActivityCompat.finishAffinity(this)
        }
        dialog.create()
        dialog.show()
    }
    btnProceedToCart.setOnClickListener {
        btnProceedToCart.visibility = View.GONE

        val fragment = CartActivity()
        val args = Bundle()
        args.putInt("resId", resId as Int)
        args.putString("resName", resName)
        fragment.arguments= args
        val transaction = supportFragmentManager.beginTransaction()
        transaction.addToBackStack("menu")
        transaction.replace(R.id.menuLayout, fragment)
        transaction.commit()
    }
}


override fun onBackPressed() {
    if (orderList.size > 0) {
        val dialog = AlertDialog.Builder(this)
        dialog.setTitle("Confirmation")
        dialog.setMessage("Going back will reset cart items.Do you still want to proceed?")
        dialog.setPositiveButton("YES") { text, listener ->
            super.onBackPressed()
        }
        dialog.setNegativeButton("NO") { text, listener ->

        }

        dialog.create()
        dialog.show()
    } else if (orderList.isEmpty()) {
        super.onBackPressed()
    }


}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    val id = item.itemId
    if (id == android.R.id.home) {
        if (orderList.size > 0) {
            val dialog = AlertDialog.Builder(this)
            dialog.setTitle("Confirmation")
            dialog.setMessage("Going back will reset cart items.Do you still want to proceed?")
            dialog.setPositiveButton("YES") { text, listener ->
                startActivity(Intent(this, MainActivity::class.java))
            }
            dialog.setNegativeButton("NO") { text, listener ->

            }

            dialog.create()
            dialog.show()
        } else if (orderList.isEmpty()) {
            startActivity(Intent(this, MainActivity::class.java))
        }
    }
    return super.onOptionsItemSelected(item)


}

}

适配器文件

MenuRecyclerAdapter类( val context:上下文, val itemList:ArrayList, val侦听器:onItemClickListener ): RecyclerView.Adapter (){

companion object {
    var isCartEmpty = true
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MenuViewHolder {
    val view = LayoutInflater.from(parent.context)
        .inflate(R.layout.activity_menu_recycler_adapter, parent, false)

    return MenuRecyclerAdapter.MenuViewHolder(view)
}

override fun getItemCount(): Int {
    return itemList.size
}
interface onItemClickListener {
    fun onAddItemClick(orderDetail: Menu)
    fun onRemoveItemClick(orderDetail: Menu)
}

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

    val menu= itemList[position]
    holder.foodName.text = menu.name
    val cost="Rs.${menu.cpp}"
    holder.txtFoodPrice.text = cost
    holder.txtSNo.text = (position + 1).toString()
    val listOfItems=GetAllItemsAsyncTask(context).execute().get()

    if(listOfItems.isNotEmpty() && listOfItems.contains(menu.id.toString())){
        holder.btnAddtoCart.text="Remove"
        val favColor= ContextCompat.getColor(context,R.color.colorAccent)
        holder.btnAddtoCart.setBackgroundColor(favColor)
    }
    else{
        holder.btnAddtoCart.text="Add"
        val noFavColor= ContextCompat.getColor(context,R.color.colorPrimary)
        holder.btnAddtoCart.setBackgroundColor(noFavColor)
    }

    holder.btnAddtoCart.setOnClickListener {

        val cartEntity = CartEntity(
            menu.id.toString(),
            menu.name,
            menu.cpp
        )

        if (!DBAsyncTask(context, cartEntity, 3).execute().get()) {

            val async = DBAsyncTask(context, cartEntity, 1).execute()
            val result = async.get()

            if (result) {
                Toast.makeText(context, "Added to cart", Toast.LENGTH_SHORT).show()

                holder.btnAddtoCart.text = "Remove"
                val favColor = ContextCompat.getColor(context, R.color.colorAccent)
                holder.btnAddtoCart.setBackgroundColor(favColor)

            } else {
                Toast.makeText(context, "Some Error Occurred", Toast.LENGTH_SHORT).show()
            }
        } else {

            val async = DBAsyncTask(context, cartEntity, 2).execute()
            val result = async.get()

            if (result) {
                Toast.makeText(context, "Removed from cart", Toast.LENGTH_SHORT).show()

                holder.btnAddtoCart.text = "Add"
                val noFavColor = ContextCompat.getColor(context, R.color.colorPrimary)
                holder.btnAddtoCart.setBackgroundColor(noFavColor)

            } else {
                Toast.makeText(context, "Some Error Occurred", Toast.LENGTH_SHORT).show()
            }
        }
    }

}

override fun getItemViewType(position: Int): Int {
    return position
}

class MenuViewHolder(view: View) : RecyclerView.ViewHolder(view) {
    val foodName: TextView = view.findViewById(R.id.foodName)
    val txtFoodPrice: TextView = view.findViewById(R.id.txtFoodPrice)
    val btnAddtoCart: Button = view.findViewById(R.id.btnAddtoCart)
    val txtSNo: TextView = view.findViewById(R.id.txtSNo)
}
class DBAsyncTask(val context: Context, private val cartEntity: CartEntity, private val mode: Int): AsyncTask<Void, Void, Boolean>(){

    private val db= Room.databaseBuilder(context, CartDatabase::class.java, "cart-db").build()

    override fun doInBackground(vararg params: Void?): Boolean {

        when(mode){

            1 -> {

                db.cartDao().insertItem(cartEntity)
                db.close()
                return true

            }

            2 -> {

                db.cartDao().removeItem(cartEntity)
                db.close()
                return true

            }

            3 -> {

                val cart: CartEntity?=db.cartDao().getItemById(cartEntity.itemId)
                db.close()
                return cart != null
            }
        }
        return false
    }
}

class GetAllItemsAsyncTask(context: Context):AsyncTask<Void,Void,List<String>>(){

    val db = Room.databaseBuilder(context, CartDatabase::class.java, "cart-db").build()

    override fun doInBackground(vararg params: Void?): List<String> {

        val list=db.cartDao().getAllItems()
        val listOfIds= arrayListOf<String>()
        for(i in list){
            listOfIds.add(i.itemId.toString())
        }
        return listOfIds
    }
}

}

0 个答案:

没有答案