Me puede decir alguien por que el searchView no me funcina?
esta es la clase ABuscarFragment
class ABuscarFragment : Fragment() , SearchView.OnQueryTextListener {
lateinit var viewModel: ABuscarViewModel
lateinit var buscarAdapter: ABuscarAdapter
var genero: String? = null
override fun onCreateView(
inflater: LayoutInflater , container: ViewGroup? ,
savedInstanceState: Bundle?
): View? {
genero = getActivity()!!.getIntent().getStringExtra("genero");
(activity as AppCompatActivity).supportActionBar?.title = genero
val view = inflater.inflate(R.layout.fragment_buscar , container , false)
return view
}
override fun onViewCreated(view: View , savedInstanceState: Bundle?) {
super.onViewCreated(view , savedInstanceState)
swipetorefresh.setColorSchemeResources(
android.R.color.holo_red_light ,
android.R.color.holo_blue_bright ,
android.R.color.holo_green_light ,
android.R.color.holo_orange_light ,
android.R.color.holo_red_light
)
setHasOptionsMenu(true)
initRecyclerView()
loadAPIData()
}
fun initRecyclerView(){
recyclerview.apply {
layoutManager = GridLayoutManager(context!! , 2)
buscarAdapter = ABuscarAdapter()
adapter = buscarAdapter
}
}
fun loadAPIData() {
viewModel = ViewModelProvider(this).get(ABuscarViewModel::class.java)
viewModel.getPelisListObserver().observe(
viewLifecycleOwner, Observer<List<PelisModel>> { it ->
if (it != null) {
swipetorefresh.setOnRefreshListener {
loadAPIData()
recyclerView.adapter = buscarAdapter
swipetorefresh.isRefreshing = false
progressBar.visibility = View.VISIBLE
}
progressBar.visibility = View.GONE
buscarAdapter.pelisListData = it as ArrayList<PelisModel>
buscarAdapter.notifyDataSetChanged()
} else {
Toast.makeText(context , "Error del parse o de la conexion" , Toast.LENGTH_LONG)
.show()
}
})
viewModel.getPelisCall()
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.menu_main, menu)
val searchItem = menu.findItem(R.id.action_search)
val searchView = searchItem.actionView as SearchView
searchView.setOnQueryTextListener(this)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
R.id.action_search -> {
true
}
else -> super.onOptionsItemSelected(item)
}
}
override fun onQueryTextSubmit(query: String?): Boolean {
return true
}
override fun onQueryTextChange(query: String?): Boolean {
query?.let { buscarAdapter.filter.filter(it) }
println("buscar :" + query)
return true
}
}
y el adaptador
class ABuscarAdapter() : RecyclerView.Adapter<ABuscarAdapter.MyViewHolder>(), Filterable {
var pelisListData = ArrayList<PelisModel>()
private var buscarList: List<PelisModel>? = null
private var buscarListFiltered: List<PelisModel>? = null
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
val inflater = LayoutInflater.from(parent.context).inflate(R.layout.pelis_row, parent, false)
return MyViewHolder(inflater)
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
holder.bind(pelisListData(position))
}
override fun getItemCount(): Int {
return pelisListData.size
}
class MyViewHolder(view: View): RecyclerView.ViewHolder(view) {
val tvTitle = view.tv_movieTitulo
var tvDisponible = view.tv_fecha
val tvYear = view.tv_movieAnyo
val tvGenre = view.tv_movieGenero
val thumbImageView = view.cv_iv_movie_poster
fun bind(holder: PelisModel){
tvTitle.text = holder.titulo
tvDisponible.text = holder.off_line
tvYear.text = holder.anyo
tvGenre.text = holder.genero
val url = holder.poster_path
Glide.with(thumbImageView)
.load(Constants.BASE_URL_IMAGE + url)
//.circleCrop()
.into(thumbImageView)
val offLine = (holder.off_line)
when (offLine) {
Constants.SUBIDA -> tvDisponible.visibility = GONE
else -> { // Note the block
print("NO ESTA EN LA LISTA")
}
}
}
}
override fun getFilter(): Filter {
return object : Filter() {
override fun performFiltering(charSequence: CharSequence): FilterResults {
val charString = charSequence.toString()
if (charString.isEmpty()) {
buscarListFiltered = buscarList
} else {
val filteredList = ArrayList<PelisModel>()
for (movie in buscarList!!) {
if (movie.titulo.toLowerCase().contains(charString.toLowerCase())) {
filteredList.add(movie)
}
}
buscarListFiltered = filteredList
}
val filterResults = FilterResults()
filterResults.values = buscarListFiltered
return filterResults
}
override fun publishResults(charSequence: CharSequence, filterResults: FilterResults) {
buscarListFiltered = filterResults.values as List<PelisModel>?
}
}
}
}