Question

I'm trying to do Search in my custom listview. But when text change in EditText, IF doesn't work. That's my code. I use SimpleAdapter. What is wrong ?

editText.addTextChangedListener(new TextWatcher() {

@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {


  //get the text in the EditText
     String searchString= editText.getText().toString();
     int textLength=searchString.length();

     //clear the initial data set
     searchResults.clear();

     for(int i=0;i<docs.size();i++)
     {
         String playerName=docs.get(i).get(FIRST).toString();
         if(textLength<=playerName.length()){
             //compare the String in EditText with Names in the ArrayList
             if(searchString.equalsIgnoreCase(playerName.substring(0,textLength)))
             {
                 searchResults.add(docs.get(i));
                 Log.i("searchResults", docs.get(i)+"");

             }
             else Log.i("doesn't work", "doesn't work");
    }
     }

     adapter.notifyDataSetChanged(); 

adapter = new SimpleAdapter(Main.this, searchResults, R.layout.list,
           new String[] { FIRST, LAST, DATE  }, new int[] { R.id.text1, R.id.text2, R.id.date });

 listView.setAdapter(adapter);
 listView.setTextFilterEnabled(true);
}

@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    

} });
Was it helpful?

Solution

This is my search in listview. Using SimpleAdapter for listview.

ListView  listView;
SimpleAdapter adapter;
private static ArrayList<HashMap<String, Object>> docs;
private static ArrayList<HashMap<String, Object>> searchResults;

EditText editText;

    public void onCreate(Bundle savedInstanceState) {

    listView = (ListView) findViewById(R.id.list);
    editText = (EditText) findViewById(R.id.text);

    docs = new ArrayList<HashMap<String, Object>>();
    // values for docs
    getUrlDocs(false);


    searchResults = new ArrayList<HashMap<String,Object>>();

    editText.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {

          int textlength = editText.getText().length();
          String searchString= editText.getText().toString();
          searchResults.clear();
          String attr = null;
            for (int i = 0; i < docs.size(); i++)
            {

              attr = docs.get(i).get(FIRST).toString().trim();
              Log.i("attr", attr+"");

                if (textlength  <= attr.length())
                {

                    if (searchString.equalsIgnoreCase(attr.substring(0,textlength)))
                    {
                      searchResults.add(docs.get(i));
                    }
                }
            }

            adapter = new SimpleAdapter(Main.this, searchResults, R.layout.list,
                    new String[] { FIRST, LAST, DATE  }, new int[] { R.id.text1, R.id.text2, R.id.date });

          listView.setAdapter(adapter);

        }

        @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    

        }
    });

}

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top