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();
}
}
,
대단히 감사합니다! – AlexTheLion