J'apprends la scala. Essayer de filtrer les données dans recyclerview. J'ai utilisé le code similaire dans Java et ça marche. Mais quand j'ai essayé dans Scala son filtrage pas comme prévu. Le résultat affiché dans le filtrage est incorrect. Comme il y a 2 Rakesh
dans la liste. Mais quand je tape "ra", il ne montre que "Pranab Pal". S'il vous plaît laissez-moi savoir ce que je fais mal dans Filtering
. Merci.Filtrer les données dans recyclerview
class NewActivity extends AppCompatActivity {
private var getBtn: Button = _
var list: List[Model] = List()
var recyclerView: RecyclerView = _
var adapter: MyAdapter = _
var listBuffer = new ListBuffer[Model]()
var searchEt: EditText = _
override def onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_new)
searchEt = findViewById(R.id.searchEt).asInstanceOf[EditText]
getBtn = findViewById(R.id.getBtn).asInstanceOf[Button]
getBtn.setOnClickListener(new View.OnClickListener {
override def onClick(view: View): Unit = {
listBuffer += Model("Somnath", "Pal")
listBuffer += Model("Bhavesh", "Mandal")
listBuffer += Model("Rakesh", "Choudhary")
listBuffer += Model("Rakesh", "Tiwary")
listBuffer += Model("Pranab", "Pal")
listBuffer += Model("Mrinal", "Chatterjee")
listBuffer += Model("Abhinav", "Sinha")
listBuffer += Model("Abhinav", "Kumar")
listBuffer += Model("Amit", "Tiwary")
/*val model1 = Model("Somnath", "Pal")
val model2 = Model("Bhavesh", "Mandal")
val model3 = Model("Rakesh", "Choudhary")
listBuffer += (model1, model2, model3)*/
list = listBuffer.toList
recyclerView = findViewById(R.id.recycler).asInstanceOf[RecyclerView]
recyclerView.setLayoutManager(new LinearLayoutManager(NewActivity.this, LinearLayoutManager.VERTICAL, false))
recyclerView.setHasFixedSize(true)
adapter = new MyAdapter(NewActivity.this, list)
recyclerView.setAdapter(adapter)
}
})
searchEt.addTextChangedListener(new TextWatcher() {
override def beforeTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int): Unit = if(3>0){
}
override def onTextChanged(charSequence: CharSequence, i: Int, i1: Int, i2: Int): Unit = NewActivity.this.adapter.getFilter().filter(charSequence)
override def afterTextChanged(editable: Editable): Unit = {
if(3>0){
}
}
})
}
}
class MyAdapter(context: Context, resource: List[Model]) extends RecyclerView.Adapter[RcvMsgViewHolder] with Filterable {
var filterList: List[Model] = resource
var arrayList: List[Model] = resource
override def onCreateViewHolder(parent: ViewGroup, viewType: Int): RcvMsgViewHolder = {
val inflater: LayoutInflater = context.asInstanceOf[Activity].getLayoutInflater
val mconvertView = inflater.inflate(R.layout.row, parent, false)
new RcvMsgViewHolder(mconvertView, viewType, context)
}
override def getItemCount: Int = {
if (filterList != null) {
filterList.size
}
else {
0
}
}
override def onBindViewHolder(holder: RcvMsgViewHolder, position: Int): Unit = {
val item = filterList(position)
holder.fnameTxt.setText(item.fName)
holder.lnameTxt.setText(item.lName)
}
override def getFilter: Filter = {
new Filter {override def publishResults(charSequence: CharSequence, filterResults: FilterResults): Unit = {
filterList = filterResults.values.asInstanceOf[List[Model]]
notifyDataSetChanged()
}
override def performFiltering(charSequence: CharSequence): FilterResults = {
val charString: String = charSequence.toString.toLowerCase()
var nlistBuffer = new ListBuffer[Model]()
if (charString.isEmpty) filterList = arrayList
else {
nlistBuffer.clear()
for (item <- arrayList) {
if (item.fName.contains(charString) || item.lName.contains(charString)){
nlistBuffer += new Model(item.fName, item.lName)
}
}
filterList = nlistBuffer.toList
}
val filterResults: Filter.FilterResults = new Filter.FilterResults
filterResults.values = filterList
filterResults.count = filterList.size
filterResults
}
}
}
}
class RcvMsgViewHolder(mconvertView: View, viewType: Int, context: Context) extends RecyclerView.ViewHolder(mconvertView) {
var position = viewType
var item: Model = null
val fnameTxt: TextView = mconvertView.findViewById(R.id.fnameTxt).asInstanceOf[TextView]
val lnameTxt: TextView = mconvertView.findViewById(R.id.lnameTxt).asInstanceOf[TextView]
}
case class Model(fName: String, lName: String)
Merci beaucoup. Cela fonctionne parfaitement. – Sammy