J'essaie de définir la recherche dans une liste personnalisée il y a une erreur de temps d'exécution ne sais pas pourquoi j'ai suivi l'un de la pile sur le post de flux .Il est ce que j'essaie activité code:comment faire une opération de recherche dans custome listview avec image
private ArrayList<Songfileinfo> songarr = new ArrayList<>();
private static final int EXT_STORAGE_PERMISSION_REQ_CODE = 2;
private SearchAdapter adapte;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkReadStoragePermission();
Songdata load = new Songdata();
this.songarr = load.getPlayList(this);
ListView listView = (ListView) findViewById(R.id.list);
EditText editText = (EditText)findViewById(R.id.editText);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
adapte.getFilter().filter(charSequence.toString());
}
@Override
public void afterTextChanged(Editable editable) {
}
});
adapte = new SearchAdapter(this, songarr);
listView.setAdapter(adapte);
}
code Adaptateur
public class SearchAdapter extends BaseAdapter implements Filterable {
private ArrayList<Songfileinfo> songar;
private ArrayList<Songfileinfo> searchar;
private LayoutInflater inflater;
private Context context;
public SearchAdapter(Context context, ArrayList<Songfileinfo> songarr) {
this.searchar = songarr;
this.songar = songarr;
this.context= context;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return songar.size();
}
@Override
public Object getItem(int i) {
return i;
}
@Override
public long getItemId(int i) {
return i;
}
private class ViewHolder {
LinearLayout llContainer;
TextView tvName, tvPrice;
CircleImageView circleImageView;
}
@Override
public View getView(final int i, View convertview, ViewGroup viewGroup) {
ViewHolder holder = null;
if (convertview == null) {
holder = new ViewHolder();
convertview = inflater.inflate(R.layout.custom, null);
holder.llContainer = (LinearLayout) convertview.findViewById(R.id.tryi1);
holder.tvName = (TextView) convertview.findViewById(R.id.textView);
holder.tvPrice = (TextView) convertview.findViewById(R.id.textView2);
holder.circleImageView = (CircleImageView) convertview.findViewById(R.id.profile_image);
convertview.setTag(holder);
} else {
holder = (ViewHolder) convertview.getTag();
}
holder.tvName.setText(songar.get(i).getTitle());
holder.tvPrice.setText(songar.get(i).getAlbum());
Glide.with(context).load(Uri.parse(songar.get(i).getAlbum_art()))
.thumbnail(0.5f)
.fitCenter()
.error(R.drawable.music)
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(holder.circleImageView);
return convertview;
}
@Override
public Filter getFilter() {
Filter filter = new Filter() {
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint,FilterResults results) {
searchar = (ArrayList<Songfileinfo>) results.values; // has the filtered values
notifyDataSetChanged(); // notifies the data with new filtered values
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults(); // Holds the results of a filtering operation in values
ArrayList<Songfileinfo> FilteredArrList = new ArrayList<Songfileinfo>();
if (searchar == null) {
searchar = new ArrayList<Songfileinfo>(songar); // saves the original data in mOriginalValues
}
if (constraint == null || constraint.length() == 0) {
// set the Original result to return
results.count = searchar.size();
results.values = searchar;
} else {
constraint = constraint.toString().toLowerCase();
for (int i = 0; i < searchar.size(); i++) {
String data = searchar.get(i).getTitle();
if (data.toLowerCase().startsWith(constraint.toString())) {
FilteredArrList.add(new Songfileinfo(searchar.get(i).getTitle(),searchar.get(i).getAlbum(),searchar.get(i).getAlbum_art()));
}
}
// set the Filtered result to return
results.count = FilteredArrList.size();
results.values = FilteredArrList;
}
return results;
}
};
return filter;
}
}
et informations songfile classe
public class Songfileinfo implements Parcelable{
private String title,album,artist,file_uri;
private String album_art;
public Songfileinfo(Parcel in) {
title = in.readString();
album = in.readString();
artist = in.readString();
file_uri = in.readString();
album_art = in.readString();
}
public static final Creator<Songfileinfo> CREATOR = new Creator<Songfileinfo>() {
@Override
public Songfileinfo createFromParcel(Parcel in) {
return new Songfileinfo(in);
}
@Override
public Songfileinfo[] newArray(int size) {
return new Songfileinfo[size];
}
};
public Songfileinfo(String album_art,String title,String album) {
this.album=album;
this.album_art=album_art;
this.title=title;
}
public Songfileinfo() {
}
l'application est très bien, il affiche correctement le listview mais quand je clique sur le texte de modifier, il se bloque avec l'erreur
java.lang.NullPointerException: Attempt to invoke virtual method 'android.widget.Filter beatbox.neelay.searchtest.SearchAdapter.getFilter()' on a null object reference
at beatbox.neelay.searchtest.MainActivity$1.onTextChanged(MainActivity.java:47)
at android.widget.TextView.sendOnTextChanged(TextView.java:8000)
at android.widget.TextView.handleTextChanged(TextView.java:8062)
at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:10185)
at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:1033)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:559)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:492)
at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:34)
at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:685)
at android.view.inputmethod.BaseInputConnection.setComposingText(BaseInputConnection.java:445)
at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:340)
at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:78)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5441)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)
une idée où je fais mal ??
Pouvez-vous poster le code complet du premier extrait ?? –