title: How to implement getfilter() with custom adapter that extends baseadapter
body: <p>here is my main activity</p>
  
  <pre><code>package com.javacodegeeks.android.lbs;
  
  import android.os.Bundle;
  import android.app.Activity;
  import android.content.Intent;
  import android.view.Menu;
  import android.view.MenuInflater;
  import android.view.MenuItem;
  import android.widget.Toast;
  import lbs.promotion.*;
  import java.util.ArrayList;
  import java.util.HashMap;
  import java.util.List;
  import org.apache.http.NameValuePair;
  import org.json.JSONArray;
  import org.json.JSONException;
  import org.json.JSONObject;
  import android.app.Activity;
  import android.app.ProgressDialog;
  import android.content.Intent;
  import android.os.AsyncTask;
  import android.os.Bundle;
  import android.text.Editable;
  import android.text.TextWatcher;
  import android.util.Log;
  import android.view.View;
  import android.widget.AdapterView;
  import android.widget.EditText;
  import android.widget.ListView;
  import android.widget.AdapterView.OnItemClickListener;
  
  public class Curve extends Activity {
  
      private ProgressDialog pDialog;
       JSONParser jParser = new JSONParser();
       ArrayList&lt;HashMap&lt;String, String&gt;&gt; DaftarPromotion = new ArrayList&lt;HashMap&lt;String, String&gt;&gt;();
  
       private static String url_daftar_promotion = "http://10.0.2.2/webserver_maaug/promotion/daftar_promotion.php";
  
       String lon = "101.5178";
       String lat = "3.0724";
  
       public static final String TAG_SUCCESS = "success";
       public static final String TAG_DAFTAR_PROMOTION = "daftar_promotion";
       public static final String TAG_ID_PROMO = "PromoID";
       public static final String TAG_NAMA_PROMO = "PromoName";
       public static final String TAG_LINK_IMAGE_PROMO = "PromoImage";
       public static final String TAG_DESC_PROMO= "PromoDesc";
       public static final String TAG_CATE_PROMO = "PromoCate";
       public static final String TAG_CONT_PROMO = "PromoContact";
       public static final String TAG_DATES_PROMO = "PromoDateStart";
       public static final String TAG_DATEE_PROMO = "PromoDateEnd";
  
       JSONArray daftar_promotion = null;
  
       ListView list;
  
       PromotionListAdapter adapter;
  
       EditText inputSearch;
  
       private Curve activity;
  
       @Override
       public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_curve);
       DaftarPromotion = new ArrayList&lt;HashMap&lt;String, String&gt;&gt;();
  
        new Activity().execute();
        activity = this;
        list = (ListView) findViewById(R.id.list);
  
        inputSearch = (EditText) findViewById(R.id.search_box);
  
        inputSearch.addTextChangedListener(new TextWatcher() {
  
              @Override
              public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
                  // When user changed the Text
                  Curve.this.adapter.getFilter().filter(cs);
              }
  
              @Override
              public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                      int arg3) {
                  // TODO Auto-generated method stub
  
              }
  
              @Override
              public void afterTextChanged(Editable arg0) {
                  // TODO Auto-generated method stub
              }
          }); 
  
  
  
  
        list.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView&lt;?&gt; parent, View view,
        int position, long id) {
            HashMap&lt;String, String&gt; map = DaftarPromotion.get(position);
            String pna = map.get(TAG_NAMA_PROMO);
            String pde = map.get(TAG_DESC_PROMO);
            String pca = map.get(TAG_CATE_PROMO);
            String pcon = map.get(TAG_CONT_PROMO);
            String pds = map.get(TAG_DATES_PROMO);
            String pdae = map.get(TAG_DATEE_PROMO);
  
  
  
              Toast.makeText(Curve.this, pna +"\n" + pde +"\n" + pca +"\n" + pds +" to " + pdae +"\n" + pcon,Toast.LENGTH_LONG).show();
  
        }
        }); 
  
  
  
        }
  
  
       public boolean onCreateOptionsMenu(Menu menu) {
              MenuInflater inflater = getMenuInflater();
              inflater.inflate(R.menu.smenu, menu);
              return true;
          }
       public boolean onOptionsItemSelected(MenuItem item) {
           switch (item.getItemId()) {
              case R.id.about:
                   Toast.makeText(Curve.this,"Mobile Advertising Application Using GPS V1.0",Toast.LENGTH_LONG).show();
              return true;
              case R.id.search:{
                   Intent intent = new Intent(Curve.this, Search.class);
                   intent.putExtra("lon",lon);
                   intent.putExtra("lat",lat);
                   startActivity(intent);
              //startActivity(new Intent(this, Search.class));
  
              }
              return true;
              default:
              return super.onOptionsItemSelected(item);
          }
          }
  
        public void SetListViewAdapter(ArrayList&lt;HashMap&lt;String, String&gt;&gt; daftar) {
        adapter = new PromotionListAdapter(activity, daftar);
        list.setAdapter(adapter);
        }
  
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == 100) {
        Intent intent = getIntent();
        finish();
        startActivity(intent);
        }
        }
  
        class Activity extends AsyncTask&lt;String, String, String&gt; {
  
        @Override
        protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(Curve.this);
        pDialog.setMessage("Please Wait...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(false);
        pDialog.show();
        }
  
        protected String doInBackground(String... args) {
        List&lt;NameValuePair&gt; params = new ArrayList&lt;NameValuePair&gt;();
        JSONObject json = jParser.makeHttpRequest(url_daftar_promotion, "GET",params);
  
        Log.d("All Products: ", json.toString());
        try {
        int success = json.getInt(TAG_SUCCESS);
        if (success == 1) {
             daftar_promotion = json.getJSONArray(TAG_DAFTAR_PROMOTION);
             for (int i = 0; i &lt; daftar_promotion.length();i++){
             JSONObject c = daftar_promotion.getJSONObject(i);
             String PromoID = c.getString(TAG_ID_PROMO);
             String PromoName = c.getString(TAG_NAMA_PROMO);
             String pat = "http://10.0.2.2/webserver_maaug/";
             String PromoImage = pat + c.getString(TAG_LINK_IMAGE_PROMO);
             String PromoDesc = c.getString(TAG_DESC_PROMO);
             String PromoCate = c.getString(TAG_CATE_PROMO);
             String PromoDateStart = c.getString(TAG_DATES_PROMO);
             String PromoDateEnd = c.getString(TAG_DATEE_PROMO);
             String PromoContact = c.getString(TAG_CONT_PROMO);
  
             HashMap&lt;String, String&gt; map = new HashMap&lt;String, String&gt;();
  
             map.put(TAG_ID_PROMO, PromoID);
             map.put(TAG_NAMA_PROMO, PromoName);
             map.put(TAG_LINK_IMAGE_PROMO, PromoImage);
             map.put(TAG_DESC_PROMO, PromoDesc);
             map.put(TAG_CATE_PROMO, PromoCate);
             map.put(TAG_DATES_PROMO, PromoDateStart);
             map.put(TAG_DATEE_PROMO, PromoDateEnd);
             map.put(TAG_CONT_PROMO, PromoContact);
  
             DaftarPromotion.add(map);
             }
  
             } else {
             }
             } catch (JSONException e) {
             e.printStackTrace();
             }
             return null;
             }
  
             protected void onPostExecute(String file_url) {
             pDialog.dismiss();
             runOnUiThread(new Runnable() {
             public void run() {
  
             SetListViewAdapter(DaftarPromotion);
  
  
  
  
                  }
             });
          }
      }
      }
  </code></pre>
  
  <p>and this is my custom adapter, it is a very simple one, without an object class of it's own</p>
  
  <pre><code>package lbs.promotion;
  
  import java.util.ArrayList;
  import java.util.HashMap;
  
  import com.javacodegeeks.android.lbs.Curve;
  import com.javacodegeeks.android.lbs.R;
  
  import android.app.Activity;
  import android.content.Context;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.BaseAdapter;
  import android.widget.Filter;
  import android.widget.Filterable;
  import android.widget.ImageView;
  import android.widget.TextView;
  
  public class PromotionListAdapter extends BaseAdapter {
  
   private Activity activity;
   private ArrayList&lt;HashMap&lt;String, String&gt;&gt; data;
   private static LayoutInflater inflater = null;
   public ImageLoader imageLoader;
  
   public PromotionListAdapter(Activity a, ArrayList&lt;HashMap&lt;String, String&gt;&gt; d) {
  
   activity = a;
   data = d;
   inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
   imageLoader = new ImageLoader(activity.getApplicationContext());
   }
  
   public int getCount() {
   return data.size();
   }
  
   public Object getItem(int position) {
   return position;
   }
  
   public long getItemId(int position) {
   return position;
   }
  
   public View getView(int position, View convertView, ViewGroup parent) {
  
       View vi = convertView;
        if (convertView == null)vi = inflater.inflate(R.layout.item_list_promotion, null);
  
        TextView PromoID = (TextView) vi.findViewById(R.id.PromoID);
        TextView PromoName = (TextView) vi.findViewById(R.id.PromoName);
        TextView PromoImage = (TextView) vi.findViewById(R.id.PromoImage);
        TextView PromoDesc = (TextView) vi.findViewById(R.id.PromoDesc);
        TextView PromoCate = (TextView) vi.findViewById(R.id.PromoCate);
        TextView PromoContact = (TextView) vi.findViewById(R.id.PromoContact);
        TextView PromoDateStart = (TextView) vi.findViewById(R.id.PromoDateStart);
        TextView PromoDateEnd = (TextView) vi.findViewById(R.id.PromoDateEnd);
        ImageView thumb_image = (ImageView) vi.findViewById(R.id.image_promo);
  
        HashMap&lt;String, String&gt; daftar_promotion = new HashMap&lt;String, String&gt;();
        daftar_promotion = data.get(position);
  
        PromoID.setText(daftar_promotion.get(Curve.TAG_ID_PROMO));
  
        PromoName.setText(daftar_promotion.get(Curve.TAG_NAMA_PROMO));
  
        PromoImage.setText(daftar_promotion.get(Curve.TAG_LINK_IMAGE_PROMO));
  
        PromoDesc.setText(daftar_promotion.get(Curve.TAG_DESC_PROMO));
  
        PromoCate.setText(daftar_promotion.get(Curve.TAG_CATE_PROMO));
  
        PromoContact.setText(daftar_promotion.get(Curve.TAG_CONT_PROMO));
  
        PromoDateStart.setText(daftar_promotion.get(Curve.TAG_DATES_PROMO));
  
        PromoDateEnd.setText(daftar_promotion.get(Curve.TAG_DATEE_PROMO));
  
        imageLoader.DisplayImage(daftar_promotion.get(Curve.TAG_LINK_IMAGE_PROMO),thumb_image);
  
        return vi;
  
        }
  
  
  
  
  }
  </code></pre>
  
  <p>here is my layout.xml</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="vertical" &gt;
  
   &lt;!-- Editext for Search --&gt;
      &lt;EditText android:id="@+id/search_box"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:hint="type to search"
          android:inputType="text"
          android:maxLines="1"/&gt;
  
  &lt;ListView
  android:id="@+id/list"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:divider="#040404"
  android:dividerHeight="1dp"
  android:listSelector="@drawable/list_selector" /&gt;
  
  &lt;/LinearLayout&gt;
  </code></pre>
  
  <p>how do i get the getfilter() function working? or is there any simpler way to implement filtering in my listview? i want to filter based on my PromoName</p>