- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经将 json 文件中的所有数据放入回收 View 中。取而代之的是,我在布局顶部分配了 4 个按钮(我在下面提到了它)。单击每个按钮时,我想按评估书类别过滤我的回收 View 。我不知道该怎么做。
这是我的模型类
data class Model(
val author: Author,
val cover_page: String,
val description: String,
val file_size: Int,
val id: Int,
val isbn: String,
val language: String,
val name: String,
val no_of_pages: String,
val price: String,
val category: String
)
data class Author(
val name: String
)
这是我的适配器
class RecycleAdapter(val context: Context) : RecyclerView.Adapter<RecycleAdapter.MyViewHolder>() {
var dataList : List<Model> = listOf()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val view =
LayoutInflater.from(parent.context).inflate(R.layout.adapter_layout, parent, false)
return MyViewHolder(view)
}
override fun getItemCount(): Int {
return dataList.size
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.name.text = dataList.get(position).name
holder.description = dataList.get(position).description
Glide.with(context).load(dataList.get(position).cover_page)
.apply(RequestOptions().centerCrop())
.into(holder.cover)
holder.author.text = dataList.get(position).author.name
holder.price.text = dataList.get(position).price
holder.language = dataList.get(position).language
holder.isbn = dataList.get(position).isbn
holder.numbOfPages = dataList.get(position).no_of_pages
holder.layoutPay.setOnClickListener {
val intent = Intent(context, BookDetails::class.java)
intent.putExtra("name", dataList.get(position).name)
intent.putExtra("description", dataList.get(position).description)
intent.putExtra("cover", dataList.get(position).cover_page)
intent.putExtra("author", dataList.get(position).author.name)
intent.putExtra("price", dataList.get(position).price)
intent.putExtra("language", dataList.get(position).language)
intent.putExtra("isbn", dataList.get(position).isbn)
intent.putExtra("pages_count", dataList.get(position).no_of_pages)
val options =
ActivityOptions.makeCustomAnimation(
context,
android.R.anim.fade_in,
android.R.anim.fade_out
)
context.startActivity(intent, options.toBundle())
}
}
fun setData(dataList: List<Model>) {
this.dataList = dataList
//Collections.sort(dataList)
notifyDataSetChanged()
}
class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val name: TextView = itemView.findViewById(R.id.txt_title)
val cover: ImageView = itemView.findViewById(R.id.img_cover)
val author: TextView = itemView.findViewById(R.id.txt_author)
val price: TextView = itemView.findViewById(R.id.txt_price)
lateinit var description: String
lateinit var language: String
lateinit var isbn: String
lateinit var numbOfPages: String
var layoutPay: ConstraintLayout = itemView.findViewById(R.id.layout_buy)
}
}
这是主要 Activity
class MainActivity : AppCompatActivity() {
lateinit var recyclerView: RecyclerView
lateinit var recyclerAdapter: RecycleAdapter
private val ACTIVITY_NUM:Int = 0
//lateinit var dialog: Dialog
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//dialog.setContentView(R.layout.activity_detailview)
btn_feeds_all.setOnClickListener {
btn_feeds_all.setBackgroundResource(R.drawable.click_button)
btn_feeds_biographic.setBackgroundResource(R.drawable.non_click_button)
btn_feeds_adventure.setBackgroundResource(R.drawable.non_click_button)
btn_feeds_children.setBackgroundResource(R.drawable.non_click_button)
btn_cook.setBackgroundResource(R.drawable.non_click_button)
}
btn_feeds_biographic.setOnClickListener {
btn_feeds_biographic.setBackgroundResource(R.drawable.click_button)
btn_feeds_all.setBackgroundResource(R.drawable.non_click_button)
btn_feeds_adventure.setBackgroundResource(R.drawable.non_click_button)
btn_feeds_children.setBackgroundResource(R.drawable.non_click_button)
btn_cook.setBackgroundResource(R.drawable.non_click_button)
}
btn_feeds_adventure.setOnClickListener {
btn_feeds_adventure.setBackgroundResource(R.drawable.click_button)
btn_feeds_biographic.setBackgroundResource(R.drawable.non_click_button)
btn_feeds_all.setBackgroundResource(R.drawable.non_click_button)
btn_feeds_children.setBackgroundResource(R.drawable.non_click_button)
btn_cook.setBackgroundResource(R.drawable.non_click_button)
}
btn_feeds_children.setOnClickListener {
btn_feeds_children.setBackgroundResource(R.drawable.click_button)
btn_feeds_biographic.setBackgroundResource(R.drawable.non_click_button)
btn_feeds_adventure.setBackgroundResource(R.drawable.non_click_button)
btn_feeds_all.setBackgroundResource(R.drawable.non_click_button)
btn_cook.setBackgroundResource(R.drawable.non_click_button)
}
btn_cook.setOnClickListener {
btn_cook.setBackgroundResource(R.drawable.click_button)
btn_feeds_biographic.setBackgroundResource(R.drawable.non_click_button)
btn_feeds_adventure.setBackgroundResource(R.drawable.non_click_button)
btn_feeds_all.setBackgroundResource(R.drawable.non_click_button)
btn_feeds_children.setBackgroundResource(R.drawable.non_click_button)
}
btnLike.setOnClickListener {
}
recyclerView = findViewById(R.id.recyclerView)
recyclerAdapter = RecycleAdapter(this)
recyclerView.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)
recyclerView.adapter = recyclerAdapter
val apiInterface = JsonApi.create().getData()
apiInterface.enqueue(object : Callback<List<Model>> {
override fun onResponse(call: Call<List<Model>>?, response: Response<List<Model>>?) {
if (response?.body() != null)
recyclerAdapter.setData(response.body()!!)
}
override fun onFailure(call: Call<List<Model>>?, t: Throwable?) {
}
})
bottomNavigationView()
}
private fun bottomNavigationView() {
val bottomNavigationViewEx = findViewById<BottomNavigationViewEx>(R.id.bottomNaBar)
BottomNavigationViewHelper.enableNavigation(this, bottomNavigationViewEx)
val menu = bottomNavigationViewEx.getMenu()
val menuItem = menu.getItem(ACTIVITY_NUM)
menuItem.setChecked(true)
}
最佳答案
您只需要对您设置为 RecyclerView 的列表进行排序。
在每次点击类别按钮时,您必须对列表进行排序并设置为 RecyclerView。
我修改了你的代码。
将此代码添加到您的 RecyclerAdapter
//save all model list to this list
var allDataList : List<Model> = listOf()
//this will hold the sorted list which will be filter by category
var dataList : List<Model> = listOf()
//call this when you get data from API call
fun setData(dataList: List<Model>) {
//set all list to allDataList
this.allDataList = dataList
//Show initial all list
showListByCatagory("all")
}
//call this to show the sorted list by category
fun showListByCatagory(category: String){
// Filter the list by its category and set to recyclerView
when(category){
"all" -> {
this.dataList = allDataList
}
"biographic" -> {
this.dataList = allDataList.filter { it.category == "biographic" }
}
"adventure" -> {
this.dataList = allDataList.filter { it.category == "adventure" }
}
"children" -> {
this.dataList = allDataList.filter { it.category == "children" }
}
"cook"-> {
this.dataList = allDataList.filter { it.category == "cook" }
}
else ->{
this.dataList = allDataList
}
}
//Notify RecyclerView to change List.
notifyDataSetChanged()
}
现在在每次点击按钮时从您的 Activity 中调用 showListByCatagory()。
btn_feeds_all.setOnClickListener {
btn_feeds_all.setBackgroundResource(R.drawable.click_button)
btn_feeds_biographic.setBackgroundResource(R.drawable.non_click_button)
btn_feeds_adventure.setBackgroundResource(R.drawable.non_click_button)
btn_feeds_children.setBackgroundResource(R.drawable.non_click_button)
btn_cook.setBackgroundResource(R.drawable.non_click_button)
// call adapter's sort function.
recyclerAdapter.showListByCatagory("all")
}
btn_feeds_biographic.setOnClickListener {
btn_feeds_biographic.setBackgroundResource(R.drawable.click_button)
btn_feeds_all.setBackgroundResource(R.drawable.non_click_button)
btn_feeds_adventure.setBackgroundResource(R.drawable.non_click_button)
btn_feeds_children.setBackgroundResource(R.drawable.non_click_button)
btn_cook.setBackgroundResource(R.drawable.non_click_button)
// call adapter's sort function.
recyclerAdapter.showListByCatagory("biographic")
}
现在在每次点击按钮时,您将根据类别设置一个排序列表。
关于android - 如何在没有搜索 View 的情况下单击一组按钮后过滤回收 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58253923/
我在我的应用程序中使用 Hibernate Search。其中一个子集合被映射为 IndexedEmbedded。子对象有两个字段,一个是 id,另一个是日期(使用日期分辨率到毫秒)。当我搜索 id=
The App Engine Search API有一个 GeoPoint 字段。可以用它来进行半径搜索吗?例如,给定一个 GeoPoint,查找位于特定半径内的所有文档。 截至目前,它看起来像 Ge
客户对我正在做的员工管理项目提出了这个新要求,以允许他们的用户进行自定义 bool 搜索。 基本上允许他们使用:AND、OR、NOT、括号和引号。 实现它的最佳方法是什么?我检查了 mysql,它们使
很想知道哪个更快 - 如果我有一个包含 25000 个键值对的数组和一个包含相同信息的 MySQL 数据库,搜索哪个会更快? 非常感谢大家! 最佳答案 回答这个问题的最好方法是执行基准测试。 关于ph
我喜欢 smartcase,也喜欢 * 和 # 搜索命令。但我更希望 * 和 # 搜索命令区分大小写,而/和 ?搜索命令遵循 smartcase 启发式。 是否有隐藏在某个地方我还没有找到的设置?我宁
我有以下 Marklogic 查询,当在查询控制台中运行时,它允许我检索具有管理员权限的系统用户: xquery version "1.0-ml"; import schema namespace b
我希望当您搜索例如“A”时,所有以“A”开头的全名都会出现。因此,如果名为“Andreas blabla”的用户将显示 我现在有这个: $query = "SELECT full_name, id,
我想在我的网站上添加对人名的搜索。好友列表已经显示在页面上。 我喜欢 Facebook 这样做的方式,您开始输入姓名,Facebook 只会显示与查询匹配的好友。 http://cl.ly/2t2V0
您好,我在我的网站上进行搜索时遇到此错误。 Fatal error: Uncaught Error: Call to undefined function mysql_connect() in /ho
声明( 叠甲 ):鄙人水平有限,本文为作者的学习总结,仅供参考。 1. 搜索介绍 搜索算法包括深度优先搜索(DFS)和广度优先搜索(BFS)这两种,从起点开始,逐渐扩大
我正在为用户列表使用 FuturBuilder。我通过 futur: fetchpost() 通过 API 获取用户。在专栏的开头,我实现了一个搜索栏。那么我该如何实现我的搜索栏正在搜索呢? Cont
我正在使用 MVC5,我想搜索结果并停留在同一页面,这是我在 Controller (LiaisonsProjetsPPController) 中执行搜索操作的方法: public ActionRes
Azure 搜索中的两种方法 Upload 与 MergeOrUpload 之间有什么区别。 他们都做完全相同的事情。即,如果文档不存在,它们都会上传文档;如果文档已经存在,则替换该文档。 由于这两种
实际上,声音匹配/搜索的当前状态是什么?我目前正在远程参与规划一个 Web 应用程序,该应用程序将包含和公开记录的短音频剪辑(最多 3-5 秒,人名)的数据库。已经提出了一个问题,是否可以实现基于用户
在商业应用程序中,具有数百个面并不罕见。当然,并非所有产品都带有所有这些标记。 但是在搜索时,我需要添加一个方面查询字符串参数,其中列出了我想要返回的所有方面。由于我事先不知道相关列表,因此我必须在查
当我使用nvcc 5.0编译.cu文件时,编译器会为我提供以下信息。 /usr/bin/ld: skipping incompatible /usr/local/cuda-5.0/lib/libcud
我正在使用基于丰富的 Lucene 查询解析器语法的 Azure 搜索。我将“~1”定义为距离符号的附加参数)。但我面临的问题是,即使存在完全匹配,实体也没有排序。 (例如,“blue~1”将返回“b
我目前有 3 个类,一个包含 GUI 的主类,我在其中调用此方法,一个包含数据的客户类,以及一个从客户类收集数据并将其放入数组列表的 customerList 类,以及还包含搜索数组列表方法。 我正在
假设我有多个 6 字符的字母数字字符串。 abc123、abc231、abc456、cba123、bac231 和 bac123 。 基本上我想要一个可以搜索和列出所有 abc 实例的选择语句。 我只
我有这个表 "Table"内容: +--------+ | Serial | +--------+ | d100m | <- expected result | D100M | <- expect
我是一名优秀的程序员,十分优秀!