2014-12-09 3 views
1

내 재생 목록에서 검색을 구현하고 싶습니다. 내 맞춤 배열 어댑터에 getFilter를 구현하고 있었지만 목록을 수정하여 노래를 검색하고 위치가 9 였고 내 필터에서 유일한 결과였습니다. 클릭 할 때 재생할 노래가 있습니다. 인덱스 0이 아닌 9목록보기 내에서 검색 구현

내 코드 : 싱글 듣고

list.setAdapter(adapter); 

    inputSearch.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence cs, int start, int before, int count) { 
      // When user changed the Text 
      adapter.getFilter().filter(cs); 
     } 

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

을 listitem 클릭

lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
           int position, long id) { 
      // getting listitem index 
      int songIndex = position; 

      // Starting new intent 
      Intent in = new Intent(getApplicationContext(), 
        MusicPlayerActivity.class); 
      // Sending songIndex to PlayerActivity 
      in.putExtra("songIndex", songIndex); 
      setResult(SELECT_SONG, in); 
      // Closing PlayListView 
      finish(); 
     } 
    }); 

재생 목록 어댑터 안에 내 코드 :

@Override 
    public Filter getFilter() 
    { 
     if (filter == null){ 
      filter = new SongFilter(); 
     } 
     return filter; 
    } 

private class SongFilter extends Filter 
{ 
    @Override 
    protected FilterResults performFiltering(CharSequence constraint) { 
      FilterResults results = new FilterResults(); 
      /* results.values = origonalList; 
      results.count = origonalList.size();*/ 
      // We implement here the filter logic 
      if (constraint == null || constraint.length() == 0) { 
       synchronized (this) 
       { 
        // No filter implemented we return all the list 
        results.values = MainAppConfig.playerService.getPlaylist(); 
        results.count = MainAppConfig.playerService.getPlaylist().size(); 
       } 
      } 
      else { 
       // We perform filtering operation 
       ArrayList<Song> filter = new ArrayList<>(); 
       ArrayList<Song> items = new ArrayList<>(); 

       synchronized (this) 
       { 
        items.addAll(songList); 
       } 

       for (Song song : items) { 
        if (song.getFileName().toUpperCase().startsWith(constraint.toString().toUpperCase())) 
         filter.add(song); 
       } 

       results.values = filter; 
       results.count = filter.size(); 
      } 
      return results; 
     } 

     @Override 
     protected void publishResults(CharSequence constraint, 
             FilterResults results) { 
      filteredList = (ArrayList)results.values; 
      notifyDataSetChanged(); 
      clear(); 
      Log.d("Filter", "Starting to publish the results with " + songList.size() + " items"); 
      for (int i = 0; i < filteredList.size(); i++){ 
       add(filteredList.get(i)); 
      } 
      Log.d("Filter", "Finished publishing results"); 
      notifyDataSetInvalidated(); 
     } 
} 
,

답변

0

목록보기는이 시점에서 어댑터 항목의 원래 위치에 대해 알고하지 않습니다,하지만 당신은 같은 것을 함께 스스로를 찾을 수 있습니다

Song song = parent.getItemAtPosition(position); 
MainAppConfig.playerService.getPlaylist().indexOf(song); 
+0

대단히 감사합니다! – AlexTheLion