ListActvity filter for custom ArrayAdapter
<p>I've read several tutorials about the use of a simple filter for a ListActivity but I just can't figure out why it doesn't work for me. The TextWatcher's onTextChanged() method is executed with the correct string to be searched for....but then nothing happens. I think the problem might be the custom adapter but how can I make it work?</p>

<p>Maybe you could have a look at it :) 
Thanks!</p>

<pre><code>package com.RemoteControl;

import com.RemoteControl.R;

import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

public class RemoteControlPlaylist extends ListActivity {

    static Handler error_class_Handler;
    static Handler viewHandler;
    static EfficientAdapter adapter = null;
    private static EditText filterText = null;


    static class EfficientAdapter extends ArrayAdapter&lt;String&gt; {

        public EfficientAdapter(Context context, int textViewResourceId, int playlistTitle, String[] objects) {
            super(context, textViewResourceId, playlistTitle, objects);

            mInflater = LayoutInflater.from(context);
        }

        private LayoutInflater mInflater;

        @Override
        public int getCount() {
            return Settings.playlistlength;
        }

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

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            ViewHolder holder;

            if (convertView == null) 
            {
                holder = new ViewHolder();

                convertView = mInflater.inflate(R.layout.listview, null);

                holder.text = (TextView) convertView.findViewById(R.string.playlist_title);
                holder.image = (ImageView) convertView.findViewById(R.string.playlist_play);
                holder.queue = (TextView) convertView.findViewById(R.string.playlist_queue);

                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }


            return convertView;
        }


        static class ViewHolder {
            TextView text, queue;
            ImageView image;
        }

        @Override
        public String getItem(int position) {
            return Settings.playlist[position];
        }
    }

    private static TextWatcher filterTextWatcher = new TextWatcher() {

        public void afterTextChanged(Editable s) {
        }

        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
        }


        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            adapter.getFilter().filter(s);
        }

    };



    void initialize()
    {
        adapter = new EfficientAdapter(this, R.layout.listview, R.string.playlist_title, Settings.playlist);
        setListAdapter(adapter);

        filterText = (EditText) findViewById(R.string.search_box);
        filterText.addTextChangedListener(filterTextWatcher);
    }



    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.playlist);

        getListView().setTextFilterEnabled(true);

        initialize();

        error_class_Handler = new Handler();
        viewHandler = new Handler();

        getListView().setFastScrollEnabled(true);

    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        filterText.removeTextChangedListener(filterTextWatcher);
    }

}
</code></pre>

<p>where the playlist.xml file is:</p>

<pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout01"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    &gt;

    &lt;EditText android:id="@+string/search_box" 
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:hint="type to filter"
       android:inputType="text"
       android:maxLines="1"/&gt;

    &lt;ListView android:id="@+android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="1"/&gt;

&lt;/LinearLayout&gt;
</code></pre>

<p>and every row within the ListView is a listview.xml element:</p>

<pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"&gt;


     &lt;TextView
            android:id="@+string/playlist_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            &lt;!-- some layout stuff --&gt; /&gt;

    &lt;ImageView 
        android:id="@+string/playlist_play"
        android:src="@drawable/playlist_play"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
            &lt;!-- some layout stuff --&gt; /&gt;

    &lt;TextView
        android:id="@+string/playlist_queue"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
            &lt;!-- some layout stuff --&gt; /&gt;


&lt;/RelativeLayout&gt;
</code></pre>
