获取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
}
}
}