SearchAdapter.kt
class SearchAdapter(ctx:Context,private val imageModelArrayList: ArrayList<SearchModel>) :
RecyclerView.Adapter<SearchAdapter.MyViewHolder>() {
private val inflater: LayoutInflater
private val arraylist: java.util.ArrayList<SearchModel>
init {
inflater = LayoutInflater.from(ctx)
this.arraylist = java.util.ArrayList<SearchModel>()
this.arraylist.addAll(MainActivity.imageModelArrayList)
}
override fun onBindViewHolder(holder: SearchAdapter.MyViewHolder, position: Int) {
holder.time.setText(imageModelArrayList[position].getOrders())
}
override fun getItemCount(): Int {
return imageModelArrayList.size
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SearchAdapter.MyViewHolder {
val view = inflater.inflate(R.layout.view_orderhistory, parent, false)
return MyViewHolder(view)
}
inner class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var time: TextView
init {
time = itemView.findViewById(R.id.ordernumber) as TextView
}
}
fun filter(charText: String) {
var charText = charText
charText = charText.toLowerCase(Locale.getDefault())
MainActivity.imageModelArrayList.clear()
if (charText.length == 0) {
MainActivity.imageModelArrayList.addAll(arraylist)
} else {
for (wp in arraylist) {
if (wp.getOrders().toLowerCase(Locale.getDefault()).contains(charText)) {
MainActivity.imageModelArrayList.add(wp)
}
}
}
notifyDataSetChanged()
}
}
SearchModel.kt
class SearchModel {
var order: String? = null
private val image_drawable: Int = 0
fun getOrders(): String {
return order.toString()
}
fun setOrders(order: OrderHistory) {
this.order = order.toString()
}
}
Я написал код для заполнения списка. Код работает без ошибок, но моя функция поиска не работает.
MainActivity.kt
class MainActivity : AppCompatActivity(),SearchView.OnQueryTextListener {
private var recyclerView: RecyclerView? = null
private var adapter: SearchAdapter? = null
private var editsearch: SearchView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
recyclerView=findViewById(R.id.listOfBookings) as? RecyclerView
imageModelArrayList = populateList()
Log.d("hjhjh", imageModelArrayList.size.toString() + "")
adapter = SearchAdapter(this, imageModelArrayList)
recyclerView?.adapter = adapter
recyclerView?.layoutManager = LinearLayoutManager(applicationContext, LinearLayoutManager.VERTICAL, false)
recyclerView?.addOnItemTouchListener(
RecyclerTouchListener(
applicationContext,
recyclerView!!,
object : ClickListener {
override fun onClick(view: View, position: Int) {
Toast.makeText(this@MainActivity, imageModelArrayList[position].getOrders(), Toast.LENGTH_SHORT)
.show()
}
override fun onLongClick(view: View?, position: Int) {
}
})
)
editsearch = findViewById(R.id.searchView) as SearchView
editsearch?.setOnQueryTextListener(this)
val navView: BottomNavigationView = findViewById(R.id.nav_view)
val navController = findNavController(R.id.nav_host_fragment)
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
val appBarConfiguration = AppBarConfiguration(
setOf(
R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications
)
)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
}
override fun onQueryTextSubmit(query: String): Boolean {
return false
}
override fun onQueryTextChange(newText: String): Boolean {
adapter!!.filter(newText)
return false
}
private fun populateList(): ArrayList<SearchModel> {
val list = ArrayList<SearchModel>()
val xyz=HomeFragment().orderHistoryList
for (i in 0 until xyz.size-1) {
//var xyz=HomeFragment().orderHistoryList
var order=""
val imageModel = SearchModel()
imageModel.setOrders(xyz[i])
list.add(imageModel)
}
return list
}
interface ClickListener {
fun onClick(view: View, position: Int)
fun onLongClick(view: View?, position: Int)
}
internal class RecyclerTouchListener(
context: Context,
recyclerView: RecyclerView,
private val clickListener: ClickListener?
) : RecyclerView.OnItemTouchListener {
private val gestureDetector: GestureDetector
init {
gestureDetector = GestureDetector(context, object : GestureDetector.SimpleOnGestureListener() {
override fun onSingleTapUp(e: MotionEvent): Boolean {
return true
}
override fun onLongPress(e: MotionEvent) {
val child = recyclerView.findChildViewUnder(e.x, e.y)
if (child != null && clickListener != null) {
clickListener.onLongClick(child, recyclerView.getChildAdapterPosition(child))
}
}
})
}
override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean {
val child = rv.findChildViewUnder(e.x, e.y)
if (child != null && clickListener != null && gestureDetector.onTouchEvent(e)) {
clickListener.onClick(child, rv.getChildAdapterPosition(child))
}
return false
}
override fun onTouchEvent(rv: RecyclerView, e: MotionEvent) {}
override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) {
}
}
companion object {
lateinit var imageModelArrayList: ArrayList<SearchModel>
}
}
В HomeFragment у меня есть список (OrderHistoryList), в котором хранятся порядок, статус и дата. ценности. Я храню эти значения списка в другом списке "ImageModelArrayList", для которого я написал функциональность.
HomeFragment.kt
class HomeFragment : Fragment() {
private lateinit var orderHistoryViewModel: OrderHistoryViewModel
private lateinit var activityBinding: FragmentHomeBinding
var orderHistoryList:ArrayList<OrderHistory> = ArrayList()
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return setupBindings(inflater, container, savedInstanceState)
}
private fun setupBindings(
inflater: LayoutInflater,
container: ViewGroup?, savedInstanceState: Bundle?
): View? {
//val activityBinding: FragmentHomeBinding = DataBindingUtil.setContentView(this.context as MainActivity, R.layout.fragment_home) as FragmentHomeBinding
activityBinding = FragmentHomeBinding.inflate(inflater, container, false)
orderHistoryViewModel = ViewModelProviders.of(this).get(OrderHistoryViewModel::class.java)
if (savedInstanceState == null) {
orderHistoryViewModel.init()
}
activityBinding.model = orderHistoryViewModel
setupListUpdate()
return (activityBinding as ViewDataBinding).root
}
fun setupListUpdate(){
orderHistoryViewModel.init()
orderHistoryViewModel.loading?.set(View.VISIBLE)
var orderHistoryDetails : OrderHistoryDetails = OrderHistoryDetails()
orderHistoryList.add(OrderHistory(order ="#102-AB-3045",status="Intransit",Date="11 Dec"))
orderHistoryList.add(OrderHistory(order ="#102-AB-3047",status="Delivered",Date="13 Dec"))
orderHistoryList.add(OrderHistory(order ="#102-AB-3048",status="Delivered",Date="12 Dec"))
orderHistoryList.add(OrderHistory(order ="#102-AB-3049",status="Delivered",Date="14 Dec"))
orderHistoryList.add(OrderHistory(order ="#102-AB-3056",status="Delivered",Date="16 Dec"))
orderHistoryList.add(OrderHistory(order ="#102-AB-3089",status="Delivered",Date="15 Dec"))
orderHistoryList.add(OrderHistory(order ="#102-AB-3090",status="Delivered",Date="17 Dec"))
orderHistoryDetails.orderHistoryList =orderHistoryList
orderHistoryDetails.orderList =MutableLiveData()
orderHistoryDetails.orderList?.value=orderHistoryDetails.orderHistoryList
orderHistoryDetails.orderList?.observe(this,
Observer<List<OrderHistory>> { bookings ->
orderHistoryViewModel.loading.set(View.GONE)
if (bookings.isEmpty()) {
orderHistoryViewModel.showEmpty.set(View.VISIBLE)
} else {
orderHistoryViewModel.showEmpty.set(View.GONE)
orderHistoryViewModel.setBookingsInAdapter(bookings)
}
})
orderHistoryViewModel.orderHistoryDetails=orderHistoryDetails
}
}