Click here to Skip to main content
15,896,486 members
Articles / Mobile Apps / Android

Image list view filter

Rate me:
Please Sign up or sign in to vote.
4.78/5 (15 votes)
26 Sep 2013CPOL3 min read 33.1K   1.4K   18  
How to filter in a image list view, please join
package com.example.imagelistfilter;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

/**
 * 
 * @author huyletran84@gmail.com
 * 
 */
public class MainActivity extends Activity {

	public ArrayList<FootballPlayer> listDatas = new ArrayList<MainActivity.FootballPlayer>();
	public ArrayList<FootballPlayer> listBackupDatas = new ArrayList<MainActivity.FootballPlayer>();
	public FootballPlayerAdapter adapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		String[] userNames = new String[] { "Ronaldo", "Zidance", "Cong Vinh",
				"Huynh Duc", "Gerrard", "Nagatomo", "Messi", "Minh Phuong",
				"neymar" };
		int[] playerDrawableResourceIds = new int[] { R.drawable.ronaldo,
				R.drawable.zindance, R.drawable.congvinh, R.drawable.huynhduc,
				R.drawable.gerrard, R.drawable.nagatomo, R.drawable.messi,
				R.drawable.minhphuong, R.drawable.neymar };

		// Prepare dummy data
		for (int i = 0; i < playerDrawableResourceIds.length; i++) {
			FootballPlayer footballPlayer = new FootballPlayer();
			footballPlayer.name = userNames[i];
			footballPlayer.imageResourceId = playerDrawableResourceIds[i];
			listDatas.add(footballPlayer);
			listBackupDatas.add(footballPlayer);
		}

		ListView lv = (ListView) findViewById(R.id.lv);
		adapter = new FootballPlayerAdapter();
		lv.setAdapter(adapter);

		EditText filter = (EditText) findViewById(R.id.filter_text);
		filter.addTextChangedListener(new TextWatcher() {

			@Override
			public void onTextChanged(CharSequence s, int arg1, int arg2,
					int arg3) {
				adapter.getFilter().filter(s.toString());
			}

			@Override
			public void beforeTextChanged(CharSequence arg0, int arg1,
					int arg2, int arg3) {
			}

			@Override
			public void afterTextChanged(Editable arg0) {

			}
		});

	}

	private class FootballPlayerAdapter extends BaseAdapter implements
			Filterable {
		private PlayerFilter playerFilter;

		@Override
		public int getCount() {
			return listDatas.size();
		}

		public Filter getFilter() {
			if (playerFilter == null)
				playerFilter = new PlayerFilter();
			return playerFilter;
		}

		@Override
		public FootballPlayer getItem(int position) {
			return listDatas.get(position);
		}

		@Override
		public long getItemId(int position) {
			return 0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			PlayerViewHolder holder;
			if (convertView == null) {
				convertView = (ViewGroup) LayoutInflater.from(
						getApplicationContext()).inflate(
						R.layout.football_player_item, null);
				holder = new PlayerViewHolder();
				holder.name = (TextView) convertView
						.findViewById(R.id.player_name);
				holder.thumb = (ImageView) convertView
						.findViewById(R.id.player_thumbnail);
				convertView.setTag(holder);
			} else {
				holder = (PlayerViewHolder) convertView.getTag();
			}
			holder.name.setText(getItem(position).name);
			holder.thumb.setImageResource(getItem(position).imageResourceId);
			return convertView;
		}

	}

	private class PlayerFilter extends Filter {
		@Override
		protected FilterResults performFiltering(CharSequence constraint) {
			FilterResults results = new FilterResults();
			// We implement here the filter logic
			ArrayList<FootballPlayer> filters = new ArrayList<FootballPlayer>();
			if (constraint == null || constraint.length() == 0) {
				// No filter implemented we return all the list
				for (FootballPlayer player : listBackupDatas) {
					filters.add(player);
				}
				results.values = filters;
				results.count = filters.size();
			} else {
				// We perform filtering operation
				for (FootballPlayer row : listBackupDatas) {
					if (((FootballPlayer) row).name.toUpperCase().startsWith(
							constraint.toString().toUpperCase())) {
						filters.add(row);
					}
				}
				results.values = filters;
				results.count = filters.size();
			}
			return results;
		}

		@Override
		protected void publishResults(CharSequence constraint,
				FilterResults results) {
			if (results.count == 0) {
				listDatas.clear();
				adapter.notifyDataSetChanged();
			} else {
				listDatas.clear();
				ArrayList<FootballPlayer> resultList = (ArrayList<FootballPlayer>) results.values;
				for (FootballPlayer row : resultList) {
					listDatas.add(row);
				}
				adapter.notifyDataSetChanged();
			}
		}
	}

	private static class PlayerViewHolder {
		public ImageView thumb;
		public TextView name;
	}

	public class FootballPlayer {
		/** Keep the id of resource file which is player's thumbnail. */
		public int imageResourceId;
		/** Player name. */
		public String name;
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Vietnam Vietnam
I'm Java developer.
I started Java web coding from 2007 to 2010. After that, I began to develop Android from 2010 to now.
In my thinking, sharing and connecting is the best way to develop.
I would like to study more via yours comments and would like to have relationship with more developers in the world.

Comments and Discussions