2013-02-05 56 views
1

我有一个edittext和一个列表视图,其中包含数据,所以在给出关键字后,应该显示listview中的相关关键字。为此我已经完成了编码..问题被过滤搜索项目显示在吐司作为一个再见一个,但我需要它显示在列表视图中,有谁可以告诉我哪里我错了?如何使过滤的搜索结果显示在列表视图(android)

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://exm/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) { 


        } 
        }); 
+0

您不更改适配器的数据。你需要告诉适配器,新数据是'searchResults' –

+0

对不起,如果我误解误解,改变适配器的数据这段代码是正确的? adapter.notifyDataSetChanged(); @SherifelKhatib –

+0

不,这还不够你还应该更改适配器的数据 –

回答

0

SOLUTION

你是不是在适配器更改基础数据。你应该更改适配器的数据:例如,尝试用 适配器=新LazyAdapter(这一点,SearchResult所)取代

adapter.notifyDataSetChanged(); 

;
list.setAdapter(adapter);

告诉适配器新数据是searchResults


很好的解决 您shoudl使用Filter在适配器来筛选结果。

+0

我加了上面的urs代码但仍然是问题依旧@Sherif elKhatib –

相关问题