Search function. How to display filtered data in listview

I parsed the data from the website and did it to display in the list, this is my second action, in the 1st action there is an edittext and search button, after providing a keyword in editext based on that keyword, able to get related search results in toast but I want it to appear in the list, this is part of the code.

public class Home extends ListActivity {
    ArrayList<HashMap<String, String>> songsList;
    ListView list;
    LazyAdapter adapter;
    JSONArray posts;


    //ArrayList thats going to hold the search results
    ArrayList<HashMap<String, String>> searchResults;
    LayoutInflater inflater;
    // All static variables
    static final String URL = "http://www.example.com/ads/?json=get_recent_posts";


    static final String KEY_POSTS = "posts";
    static final String KEY_ID = "id";
    static final String KEY_TITLE = "title";
    static final String KEY_DATE = "date";
    static final String KEY_CONTENT = "content";
    static final String KEY_AUTHOR = "author";
    static final String KEY_NAME = "name";
    static final String KEY_ATTACHMENTS = "attachments";
    static final String KEY_SLUG = "slug";
    static final String KEY_THUMB_URL = "thumbnail";
    static final String KEY_IMAGES = "images";
    static final String KEY_URL = "url";


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

        final EditText searchBox = (EditText) findViewById(R.id.search);
        final ListView list = (ListView) findViewById(android.R.id.list);

        //get the LayoutInflater for inflating the customomView
        //this will be used in the custom adapter
        inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);


        final ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();


        // Creating JSON Parser instance
        final JSONParser jParser = new JSONParser();

        // getting JSON string from URL
        JSONObject json = jParser.getJSONFromUrl(URL);
        try {
            posts = json.getJSONArray(KEY_POSTS);

            // looping through all song nodes <song>
            for (int i = 0; i < posts.length(); i++) {
                JSONObject c = posts.getJSONObject(i);
                // Storing each json item in variable
                String id = c.getString(KEY_ID);
                String title = c.getString(KEY_TITLE);
                String date = c.getString(KEY_DATE);
                String content = c.getString(KEY_CONTENT);
                // to remove all <P> </p> and <br /> and replace with ""
                content = content.replace("<br />", "");
                content = content.replace("<p>", "");
                content = content.replace("</p>", "");

                //authornumber is agin  JSON Object
                JSONObject author = c.getJSONObject(KEY_AUTHOR);
                String name = author.getString(KEY_NAME);

                String url = null;
                String slug = null;
                try {
                    JSONArray atta = c.getJSONArray("attachments");
                    for (int j = 0; j < atta.length(); j++) {
                        JSONObject d = atta.getJSONObject(j);

                        slug = d.getString(KEY_SLUG);

                        JSONObject images = d.getJSONObject(KEY_IMAGES);

                        JSONObject thumbnail = images.getJSONObject(KEY_THUMB_URL);
                        url = thumbnail.getString(KEY_URL);

                    }
                } catch (Exception e) {
                    e.printStackTrace();

                }


                // creating new HashMap
                HashMap<String, String> map = new HashMap<String, String>();

                // adding each child node to HashMap key => value
                map.put(KEY_ID, id);
                map.put(KEY_TITLE, title);
                map.put(KEY_DATE, date);
                map.put(KEY_NAME, name);
                map.put(KEY_CONTENT, content);
                map.put(KEY_SLUG, slug);
                map.put(KEY_URL, url);


                // adding HashList to ArrayList
                songsList.add(map);
            }
        } catch (JSONException e) {
            e.printStackTrace();

        }


        //searchResults=OriginalValues initially
        searchResults = new ArrayList<HashMap<String, String>>(songsList);


        // Getting adapter by passing json data ArrayList
        adapter = new LazyAdapter(this, songsList);
        list.setAdapter(adapter);


        searchBox.addTextChangedListener(new TextWatcher() {

            public void onTextChanged(CharSequence s, int start, int before, int count) {
                //get the text in the EditText
                String searchString = searchBox.getText().toString();
                int textLength = searchString.length();

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

                for (int i = 0; i < songsList.size(); i++) {
                    String playerName = songsList.get(i).get("title").toString();

                    if (textLength <= playerName.length()) {

                        //compare the String in EditText with Names in the ArrayList
                        if (searchString.equalsIgnoreCase(playerName.substring(0, textLength)))
                            Toast.makeText(getApplicationContext(), playerName, 1).show();
                        searchResults.add(songsList.get(i));
                    }
                }

                adapter.notifyDataSetChanged();
            }

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


            }

            public void afterTextChanged(Editable s) {


            }
        });
    }
}

      

+3


source to share


1 answer


Replace this code. Of course you will output



searchBox.addTextChangedListener(new TextWatcher() {

                 public void onTextChanged(CharSequence s, int start, int before, int count) {
                   //get the text in the EditText
                    searchString=searchBox.getText().toString();
                    textLength=searchString.length();
                   searchResults.clear();

                   for(int i=0;i<songsList.size();i++)
                   {
                   playerName=songsList.get(i).get("title").toString();
                  System.out.println("player name "+playerName);
                  if(textLength<=playerName.length()){
                  //compare the String in EditText with Names in the ArrayList
                    if(searchString.equalsIgnoreCase(playerName.substring(0,textLength))){
                    searchResults.add(songsList.get(i));
                    System.out.println("the array list is "+songsList.get(i));
                    adapter=new LazyAdapter(Home.this, searchResults);   

                     list.setAdapter(adapter);
                    }

                      }


                   }
                   if(searchResults.isEmpty()){
                       Toast toast= Toast.makeText(getApplicationContext(), 
                                  "No Items Matched", Toast.LENGTH_SHORT);  
                                  toast.setGravity(Gravity.CENTER_VERTICAL|Gravity.CENTER_HORIZONTAL, 0, 0);
                                  toast.show();
                   }
                   adapter.notifyDataSetChanged();
                 }

                 public void beforeTextChanged(CharSequence s, int start, int count,
                     int after) {
                 System.out.println("before changed");

                   }

                   public void afterTextChanged(Editable s) {


                                               System.out.println("after changed");
                   }
                  });

      

+3


source







All Articles