こんにちは、があり、入力するとListview
がfiltered
になり、リストに含まれている場合にのみ値が表示されます。リストビューのAndroid Filter arrayAdapterが機能しない
答えて
変更するには、以下のコードで、あなたのアダプタ:
public class CustomListviewAdapter extends ArrayAdapter<Personne> implements Filterable {
private LayoutInflater inflater;
private ArrayList<Personne> data;
private ArrayList<Personne> filteredData = null;
private Activity mContext;
private int layoutResourceId;
public CustomListviewAdapter(Activity context, int resource, ArrayList<Personne> objects) {
super(context, resource, objects);
data = objects;
filteredData = objects;
mContext = context;
layoutResourceId = resource;
}
@Override
public int getCount() {
return filteredData.size();
}
@Override
public Personne getItem(int position) {
return super.getItem(position);
}
@Override
public int getPosition(Personne item) {
return super.getPosition(item);
}
@Override
public long getItemId(int position) {
return super.getItemId(position);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder viewHolder = null;
if (row == null) {
inflater = LayoutInflater.from(mContext);
row = inflater.inflate(layoutResourceId, parent, false);
viewHolder = new ViewHolder();
viewHolder.imageView = (ImageView) row.findViewById(R.id.icon);
viewHolder.nom = (TextView) row.findViewById(R.id.nameLabel);
viewHolder.pseudo = (TextView) row.findViewById(R.id.usernameLabel);
viewHolder.email = (TextView) row.findViewById(R.id.emailLabel);
row.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder) row.getTag();
}
viewHolder.personne = filteredData.get(position);
viewHolder.nom.setText("Nom: " + viewHolder.personne.getNom());
viewHolder.pseudo.setText("Pseudo: " + viewHolder.personne.getUsername());
viewHolder.email.setText("Email: " + viewHolder.personne.getEmail());
return row;
}
Filter filter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
String filterString = constraint.toString().toLowerCase();
FilterResults results = new FilterResults();
final List<String> tempList = data ;
int count = tempList.size();
final ArrayList<String> nlist = new ArrayList<String>(count);
String filterableString ;
for (int i = 0; i < count; i++) {
filterableString = tempList.get(i).getUserName();
if (filterableString.toLowerCase().contains(filterString)) {
nlist.add(filterableString);
}
}
results.values = nlist;
results.count = nlist.size();
return results;
}
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
filteredData = (ArrayList<String>) results.values;
notifyDataSetChanged();
}
}
public class ViewHolder {
private Personne personne;
private TextView nom;
private TextView pseudo;
private TextView email;
}
}
変更し、あなたにアダプターコードコード以下:基本的に
public class CustomListviewAdapter extends ArrayAdapter<Personne> {
private LayoutInflater inflater;
private ArrayList<Personne> data;
private ArrayList<Personne> tempList;
private Activity mContext;
private int layoutResourceId;
public CustomListviewAdapter(Activity context, int resource, ArrayList<Personne> objects) {
data = objects;
tempList = new ArrayList<>();
tempList.addAll(data);
mContext = context;
layoutResourceId = resource;
super(context, resource, tempList);
}
@Override
public int getCount() {
return tempList.size();
}
@Override
public Personne getItem(int position) {
return super.getItem(position);
}
@Override
public int getPosition(Personne item) {
return super.getPosition(item);
}
@Override
public long getItemId(int position) {
return super.getItemId(position);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder viewHolder = null;
if (row == null) {
inflater = LayoutInflater.from(mContext);
row = inflater.inflate(layoutResourceId, parent, false);
viewHolder = new ViewHolder();
viewHolder.imageView = (ImageView) row.findViewById(R.id.icon);
viewHolder.nom = (TextView) row.findViewById(R.id.nameLabel);
viewHolder.pseudo = (TextView) row.findViewById(R.id.usernameLabel);
viewHolder.email = (TextView) row.findViewById(R.id.emailLabel);
row.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder) row.getTag();
}
viewHolder.personne = tempList.get(position);
viewHolder.nom.setText("Nom: " + viewHolder.personne.getNom());
viewHolder.pseudo.setText("Pseudo: " + viewHolder.personne.getUsername());
viewHolder.email.setText("Email: " + viewHolder.personne.getEmail());
return row;
}
public void filter(String text) {
if(text != null && data!=null) {
int length=data.size();
int i=0;
tempList.clear();
if(text.isEmpty()){
tempList.addAll(data);
} else{
while(i<length){
Personne item=data.get(i);
String username = item.getUsername();
if (username.toLowerCase().startsWith(text.toLowerCase())) {
tempList.add(item);
}
i++;
}
}
notifyDataSetChanged();
}
}
public class ViewHolder {
private Personne personne;
private TextView nom;
private TextView pseudo;
private TextView email;
}
}
私はデータとなります一時リストの主なリストを維持しようとしていますメインリストから取得したデータをフィルタリングするために使用されます。上記のコードはusername
に基づいてフィルタリングされていますが、他のパラメータを追加して追加する場合はif
の条件をwhile
ループ内に追加/編集できます。
私の更新された答えを確認してください、私はコンストラクタを更新しました、私はこのアップデートで修正する必要があるバグについては正しいです。 – himanshu1496
検索結果に何も表示されていない、または間違った結果が表示されていますか? – himanshu1496
はい、何かを表示しますが、入力したものではありませんが、この新しい実装の前に、アプリケーションを起動するとすべてのアイテムリストが表示されます – stack
- 1. arrayAdapterリストビューでポップアップメニューが機能しない
- 2. Filter ListView with arrayadapter
- 3. WPF DataGrid Filterが機能しない
- 4. Androidスタジオ:ArrayAdapterがリストビューで発生する
- 5. リストビューのチェックボックスが機能しない
- 6. Androidリストビューonclicklistenerがチェックボックスで機能しない
- 7. SearchViewがリストビューのAndroidアプリケーションで機能していません
- 8. リストビューでスクロールビューが機能しない
- 9. Qt QMLリストビューpositionViewAtIndexが機能しない
- 10. リストビューlistselectorが機能しない
- 11. なぜ私のAndroidのリストビューが機能していないのですか?
- 12. Filtering ArrayAdapter Listviewがリフレッシュされない(Android)
- 13. AlertDialogからArrayAdapter notifyDataSetChangedが機能しない
- 14. CircleCI Android constraintLayoutが機能しない
- 15. Android - Firebase通知が機能しない
- 16. WebApi OData:$ filter 'any'または 'all'クエリが機能しない
- 17. Filter(Array(Range))がPopulatin User_Formコンボボックスで機能しない
- 18. コマンドGet-ADUser -FilterがPSSessionで機能しない
- 19. react-select-fast-filter-optionsフィルタが機能しない
- 20. Android API 23:インテントフィルターが機能しない
- 21. SetImageResource()がCursorAdapterのリストビューで正しく機能しない
- 22. ActionBarが機能しない
- 23. Android SDKのoverridePendingTransitionが機能しない
- 24. AndroidのprogressBar setVisibility()が機能しない
- 25. Android ViewGroupのクリップが機能しない
- 26. Androidのマイナスマージンが機能しない
- 27. AndroidのMVVMCrossバインディングが機能しない
- 28. AndroidのオフラインSpeechRecognizerが機能しない
- 29. Android webviewのスクロールが機能しない
- 30. Android - 次のボタンが機能しない
エラー/デバッグログはありますか? –
実際、あなたのperformFilteringではフィルタを実行しません。リストのすべてのエントリを新しいものに追加するだけです。あなたは次のようなものを見逃していませんでしたか? 'if(item.getNom.equals(constraint)){tempList.add(item); } '? –
私はすでにフィルタリングの結果であなたのリストのすべてのエントリを追加していると言いましたので、もちろんリストはフィルタリングされません。 –