Search code examples
javaandroidsearchsimpleadapter

Search in Custom ListView with SimpleAdapter


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    

} });

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    
    
            }
        });
    

    }