在listview中实现搜索

亚历克斯·莱昂

我想在我的播放列表中执行搜索。我在自定义数组适配器中实现了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
        }
    });

听单个列表项单击

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();
        }
}
放克僧侣

此时,列表视图尚不知道该项目在适配器中的原始位置,但是您可以使用以下类似的内容自己找到它:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Fragment内的ListView中实现搜索

来自分类Dev

如何在Android中的自定义ListView中实现搜索?

来自分类Dev

片段中实现listview

来自分类Dev

在android listview中搜索

来自分类Dev

Android-如何实现搜索功能并在ListView中返回结果?

来自分类Dev

在侧边菜单中实现ListView

来自分类Dev

在ListView UWP中有效地实现搜索

来自分类Dev

如何在Android Studio中实现搜索?

来自分类Dev

如何在MySQL中实现这种搜索?

来自分类Dev

如何在Django中实现搜索功能?

来自分类Dev

firebase:在firebase中实现模式搜索

来自分类Dev

如何在cefSharp中实现文本搜索

来自分类Dev

如何在Haskell中实现BST搜索

来自分类Dev

在Android中实现文本更改的搜索功能

来自分类Dev

在AngularJS中实现搜索:默认方式

来自分类Dev

关于实现gmail中的搜索功能

来自分类Dev

firebase:在firebase中实现模式搜索

来自分类Dev

如何在android中实现搜索功能

来自分类Dev

如何在CakePHP中实现搜索分页

来自分类Dev

在iOS Swift中实现地址搜索

来自分类Dev

电报BOT-在字典中实现搜索

来自分类Dev

在Rails 4.2.0中实现Rails Ajax搜索

来自分类Dev

如何在Django中实现搜索功能?

来自分类Dev

如何在 Jquery 中实现搜索功能?

来自分类Dev

如何在angularjs中实现自动搜索

来自分类Dev

在我的 java 函数中实现搜索

来自分类Dev

在 spring 和 HQL 中实现搜索功能

来自分类Dev

二叉搜索树中搜索功能的实现

来自分类Dev

Xamarin形式的ListView中的OnSearchBarButtonPressed的实现