Я создаю приложение для Android с Kotlin. Описание приложения выглядит следующим образом: горизонтальное представление переработчика, которое содержит весь список категорий, я использую адаптер.Затем, когда я нажимаю на элемент в этом списке, список продуктов, представленных в списке, появляется внизу в обзоре переработчика.Расположение списка товаров осуществляется двумя способами: либо списком, либо сеткой.следующий код - это действие:
class CategoryByProduct : AppCompatActivity(), CategoryAdapter.OnItemClickListener {
var mobileApi: MobileApi? = null
override fun onItemClick(view: View, viewModel: ProductCategoryData) {
Utility().removeValue(this,"Products")
var params = HashMap<String, String>()
params["ProductCategoryID"] = viewModel.id.toString()
GlobalScope.launch(Dispatchers.IO) {
val products = mobileApi!!.apiMobileProductsGetAllPost(params, 0, 50, "", "")
Utility().setArrayDataByKeyValue(this@CategoryByProduct, "Products", products)
withContext(Dispatchers.Main) {
recyclerViewProductByCategory.apply {
recyclerViewProductByCategory.layoutManager =
StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)
recyclerViewProductByCategory.adapter = ProductAdapter(products)
}
}
}
}
override fun onResume() {
super.onResume()
val productsSp = Utility().getArrayDataByKey(this@CategoryByProduct, "Products")
gridProducts.setOnClickListener {
recyclerViewProductByCategory.layoutManager =
StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL)
recyclerViewProductByCategory.adapter = productsSp?.let { it ->
ProductAdapter(
it
)
}
gridProducts.visibility = View.INVISIBLE
listProducts.visibility = View.VISIBLE
}
listProducts.setOnClickListener {
recyclerViewProductByCategory.layoutManager =
LinearLayoutManager(this@CategoryByProduct, RecyclerView.VERTICAL, false)
recyclerViewProductByCategory.adapter = productsSp?.let { it -> ProductAdapterList(it) }
listProducts.visibility = View.INVISIBLE
gridProducts.visibility = View.VISIBLE
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.list_product_by_category)
mobileApi = MobileApi()
val params = HashMap<String, String>()
GlobalScope.launch(Dispatchers.IO) {
val categories = mobileApi!!.apiMobileProductCategoriesGetAllPost(params, 0, 50, "", "")
val products = mobileApi!!.apiMobileProductsGetAllPost(params, 0, 50, "", "")
withContext(Dispatchers.Main) {
recyclerViewCategories.apply {
recyclerViewCategories.layoutManager =
LinearLayoutManager(this@CategoryByProduct, RecyclerView.HORIZONTAL, false)
recyclerViewCategories.adapter = CategoryAdapter(categories, this@CategoryByProduct)
productNumber.text = "${products.size} Products"
}
}
}
}
}
Моя проблема в том, что когда я нажимаю на категорию, появляется список принадлежащих товаров, а затем, когда я нажимаю на другую категорию, появляется список товаров с последним товаром.Не в списке товаров категории кликали.Я думаю, чтобы удалить общие предпочтения и до сих пор не работает.следующий код предназначен для общих настроек:
class Utility {
fun setArrayDataByKeyValue(context: Context, key: String, DataArrayList: Array<ProductData>) {
val arrayString = Gson().toJson(DataArrayList)
val sharedPreferences = context.getSharedPreferences(context.packageName, Context.MODE_PRIVATE)
sharedPreferences.edit().putString(key, arrayString).apply()
}
fun getArrayDataByKey(context: Context, key: String): Array<ProductData>? {
val sharedPreferences = context.getSharedPreferences(context.packageName, Context.MODE_PRIVATE)
val emptyList = Gson().toJson(ArrayList<ProductData>())
return Gson().fromJson<Array<ProductData>>(sharedPreferences.getString(key, emptyList), object :
TypeToken<Array<ProductData>>() {
}.type)
}
fun removeValue(context: Context, key: String) {
val sharedPreferences = context.getSharedPreferences(context.packageName, Context.MODE_PRIVATE)
val editor: SharedPreferences.Editor = sharedPreferences.edit()
editor.remove(key)
editor.apply()
}
}
Как мне сделать мой код функциональным.