Ich lerne scala. Der Versuch, Daten in der Recycleransicht zu filtern. Ich habe den ähnlichen Code in Java verwendet und es funktioniert. Aber als ich es in scala versuchte, filterte es nicht wie erwartet. Das Ergebnis der Filterung ist falsch. Wie gibt es 2 Rakesh
in der Liste. Aber wenn ich "ra" tippe, wird nur "Pranab Pal" angezeigt. Bitte lassen Sie mich wissen, was ich falsch mache in Filtering
. Vielen Dank.Filterdaten in 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)
Vielen Dank zu senken. Es funktioniert perfekt. – Sammy