私は、レルムアダプタのデータをフィルタリングする際に問題に直面しています。 私は、レルムアダプタのデータをフィルタリングしてデータを検索するsearchviewを作成しています。レルムアダプタのデータをフィルタリングする方法は?
searchviewの実装のための私のコードは
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.main_menu, menu);
final MenuItem item = menu.findItem(R.id.action_search);
final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
Log.e("Filter ","Filtering");
searchView.setOnQueryTextListener(this);
MenuItemCompat.setOnActionExpandListener(item,
new MenuItemCompat.OnActionExpandListener() {
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
// Do something when collapsed
adapter.setFilter(realmPhonecallList);
Log.e("Filter 1","Filtering");
return true; // Return true to collapse action view
}
@Override
public boolean onMenuItemActionExpand(MenuItem item) {
// Do something when expanded
return true; // Return true to expand action view
}
});
}
@Override
public boolean onQueryTextSubmit(String newText) {
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
final List<RealmPhoneCallLogs> filteredModelList = filter(realmPhonecallList, newText);
Log.e("Filter 2","Filtering" + newText);
adapter.setFilter(filteredModelList);
Log.e("Filter 3","Filtering" + filteredModelList);
return true;
}
private List<RealmPhoneCallLogs> filter(List<RealmPhoneCallLogs> models, String query) {
query = query.toLowerCase();
final List<RealmPhoneCallLogs> filteredModelList = new ArrayList<>();
for (RealmPhoneCallLogs model : models) {
final String text = model.getNumber().toLowerCase();
if (text.contains(query)) {
filteredModelList.add(model);
}
}
Log.e("Filter 4","Filtering" + filteredModelList);
return filteredModelList;
}
マイレルムアダプタ実装が
private class MyNamesAdapter extends RealmBaseAdapter<RealmPhoneCallLogs> {
List<RealmPhoneCallLogs> filter;
public MyNamesAdapter(OrderedRealmCollection<RealmPhoneCallLogs> data) {
super(data);
this.filter = data;
}
public class ViewHolder {
TextView number;
TextView callType;
TextView startTime;
TextView contactName;
TextView callDuration;
TextView fileSize;
ImageView contactPhoto;
ImageView callSymbol;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final RealmPhoneCallLogs realmPhoneCallLogs = getItem(position);
ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.calllog_layout, parent, false);
viewHolder.number = (TextView) convertView.findViewById(R.id.missedNumber);
viewHolder.startTime = (TextView) convertView.findViewById(R.id.missedStartTime);
viewHolder.contactName = (TextView) convertView.findViewById(R.id.missedContactName);
viewHolder.callDuration = (TextView) convertView.findViewById(R.id.missedCallDuration);
viewHolder.fileSize = (TextView) convertView.findViewById(R.id.missedFileSize);
viewHolder.contactPhoto = (ImageView) convertView.findViewById(R.id.missedImage);
viewHolder.callSymbol = (ImageView) convertView.findViewById(R.id.callSymbol);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
if (adapterData != null) {
viewHolder.number.setText(realmPhoneCallLogs.getNumber());
viewHolder.contactName.setText(getContactName(realmPhoneCallLogs.getNumber()));
viewHolder.callDuration.setText(getTime(realmPhoneCallLogs.getCallDuration()));
viewHolder.startTime.setText(realmPhoneCallLogs.getStartTime());
viewHolder.contactPhoto.setImageBitmap(getContactsImage(realmPhoneCallLogs.getNumber()));
String path = new String(Environment.getExternalStorageDirectory() + "/NewCallLogs/" + realmPhoneCallLogs.getCallRecords());
File file = new File(path);
String size;
long filesize = file.length();
long fileSizeInKB = filesize/1024;
long fileSizeInMB = fileSizeInKB/1024;
if(fileSizeInKB >=1024){
size= fileSizeInMB + " Mb";
}else {
size = fileSizeInKB + " Kb";
}
if(!size.isEmpty()){
viewHolder.fileSize.setText(size);
}else{
viewHolder.fileSize.setText(0);
}
if (realmPhoneCallLogs.getCallType().equals("I")) {
viewHolder.callSymbol.setImageResource(R.mipmap.call_received);
} else if (realmPhoneCallLogs.getCallType().equals("O")) {
viewHolder.callSymbol.setImageResource(R.mipmap.call_made);
} else if (realmPhoneCallLogs.getCallStatus().equals("UA")) {
viewHolder.callSymbol.setImageResource(R.mipmap.call_missed);
}
return convertView;
}
return convertView;
}
public void setFilter(List<RealmPhoneCallLogs> filtedData) {
filter = new ArrayList<>();
filter.addAll(filtedData);
notifyDataSetChanged();
}
}
です領域内のデータをフィルタリングする方法を、私を助けてください。ここで