使用自定义适配器从listview搜索项目

萨加尔·帕瓦尔

我正在尝试使用自定义适配器从listview中搜索。我在工具栏菜单中有搜索小部件,并且可以显示小部件。当我单击搜索图标时,它会展开,但是当我开始输入内容时,搜索不会发生并且列表会被清除。有人可以追踪这个问题吗?

这是我来自主要活动的代码:

    public class VideoActivity extends BaseActivity {
    ListView listView;
    ArrayList<Video> videoArrayList;
    public VideoListAdapter videoListAdapter;

    String vid_id, vid_title, vid_type, vid_path, vid_img;

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

        initializeToolbar();

        listView = (ListView) findViewById(R.id.listview_video);
        videoArrayList = new ArrayList<Video>();
        videoListAdapter = new VideoListAdapter(VideoActivity.this, videoArrayList);

        jsonParser = new JSONParser();

        new VideoTask().execute();

    public class VideoTask extends AsyncTask<String, String, JSONObject> {

        @Override
        protected JSONObject doInBackground(String... strings) {
            jsonObject = jsonParser.makeHttpRequest2(Network_constants.video_list_page, "POST");

            Log.e("json data", "" + jsonObject);

            return jsonObject;
        }


        @Override
        protected void onPostExecute(JSONObject jsonObject) {
            super.onPostExecute(jsonObject);
            progressDialog.dismiss();
            if (jsonObject != null) {
                try {
                    jsonArray = jsonObject.getJSONArray("videos");
                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject jsonObject1 = jsonArray.getJSONObject(i);
                        Log.d("jsonObject1", "" + jsonObject1);

                        Video video = new Video();

                        vid_id = jsonObject1.getString("video_id");
                        vid_title = jsonObject1.getString("video_channel_name");
                        vid_type = jsonObject1.getString("video_channel_link");
                        vid_path = jsonObject1.getString("video_channel_description");
                        vid_img = jsonObject1.getString("video_img_path");

                        video.set_vTitle(vid_title);

                        TextView t1 = (TextView) findViewById(R.id.video_title);
                        TextView t2 = (TextView) findViewById(R.id.video_type);

                        video.set_vArtist(vid_title);
                        video.set_vType(vid_type);

                        videoArrayList.add(video);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }

                listView.setAdapter(videoListAdapter);
                listView.setTextFilterEnabled(true);
                listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {


                        TextView cnt = (TextView) view.findViewById(R.id.video_type);
                        String cn = cnt.getText().toString();

                        Intent i = new Intent(VideoActivity.this, Youtube.class);
                        i.putExtra("url", cn);
                        startActivity(i);
                    }
                });
            }
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        menu.clear();
        getMenuInflater().inflate(R.menu.main,menu);

        MenuItem menuItem = menu.findItem(R.id.menu_search);
        final SearchView searchView = (SearchView) menuItem.getActionView();

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                if(TextUtils.isEmpty(newText)){
                    LogHelper.e("Query Result","Filter is Empty");
                }else{
                    videoListAdapter.filter(newText);
                }
                return true;
            }
        });

        return true;
    }
}

这是我的CustomAdapter类:

    public class VideoListAdapter extends BaseAdapter {
    private Activity activity;
    private static LayoutInflater inflater = null;
    ImageView imageView;
    private String mCurrentArtUrl;
    private ArrayList<Video> video;
    private ArrayList<Video> searchListView = null;



    public VideoListAdapter(Activity a, ArrayList<Video> b){

        this.activity = a;
        this.video = b;
        this.searchListView = new ArrayList<Video>();
        this.searchListView.addAll(video);
        inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    }

    @Override
    public int getCount() {
        return video.size();
    }

    @Override
    public Object getItem(int position) {
        return video.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View vi = convertView;
        if (convertView == null)
            vi = inflater.inflate(R.layout.video_list_item, null);

        final TextView v_title = (TextView)vi.findViewById(R.id.video_title);
        final TextView v_type = (TextView)vi.findViewById(R.id.video_type);
        final TextView v_artist = (TextView)vi.findViewById(R.id.video_artist);
        imageView = (ImageView) vi.findViewById(R.id.video_image);

        Video video1 = video.get(position);

        v_title.setText(video1.get_vTitle());
        v_type.setText(video1.get_vType());
        v_artist.setText(video1.get_vArtist());

        String img = video1.get_vImage();
        String profile = Network_constants.image_url + img;
        fetchImageAsync(profile);

        return vi;
    }

    // Filter method
    public void filter(String charText) {
        charText = charText.toLowerCase(Locale.getDefault());
        video.clear();

        if(charText.length() == 0){
            video.addAll(searchListView);
        }else{
            for(Video v : searchListView){
                LogHelper.e("Query","Entered For Loop");
                    if(v.get_vTitle().contains(charText)){
                        video.add(v);
                }else{
                    LogHelper.e("Query","Could not create list");
                }

            }
        }
        notifyDataSetChanged();
    }
}

我认为我的代码无法在过滤功能中使用for循环。

插口

您应该在适配器中实现Filterable

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用自定义适配器的Listview搜索无法正确显示搜索结果

来自分类Dev

ListView的自定义适配器

来自分类Dev

自定义ListView的适配器

来自分类Dev

使用自定义适配器过滤ListView

来自分类Dev

使用自定义适配器未显示ListView

来自分类Dev

使用自定义适配器获取检查的项目

来自分类Dev

使用自定义数组适配器,ListFragment中的项目不会显示在Listview中

来自分类Dev

如何使用自定义适配器将项目自动加载到ListView中

来自分类Dev

使用自定义数组适配器,ListFragment中的项目不会显示在Listview中

来自分类Dev

setOnClickListener不使用自定义适配器和自定义ListView触发

来自分类Dev

使用自定义适配器的ListView中的自定义行

来自分类Dev

在自定义ListView适配器中按项目时突出显示效果

来自分类Dev

ListView自定义适配器对错误的项目OnScroll应用操作

来自分类Dev

如何将项目动态添加到ListView的自定义适配器

来自分类Dev

listview项目未在自定义适配器的getview方法中显示分配的值

来自分类Dev

具有自定义适配器的ListView:一些项目被隐藏

来自分类Dev

自定义适配器,然后单击ListView中的项目

来自分类Dev

自定义listview适配器所选项目增量textview

来自分类Dev

ListView自定义适配器丢失imageView

来自分类Dev

自定义适配器显示RuntimeException-ListView

来自分类Dev

自定义listview适配器上的OnclickListner

来自分类Dev

ListView自定义适配器重复项

来自分类Dev

自定义基础适配器到ListView

来自分类Dev

Android ListView onClickListener自定义适配器

来自分类Dev

自定义ListView适配器中的NullPointerException

来自分类Dev

ListView自定义适配器丢失imageView

来自分类Dev

Android自定义ListView /适配器

来自分类Dev

在自定义适配器中遍历ListView

来自分类Dev

Android ListView onItemclick以及自定义适配器

Related 相关文章

  1. 1

    使用自定义适配器的Listview搜索无法正确显示搜索结果

  2. 2

    ListView的自定义适配器

  3. 3

    自定义ListView的适配器

  4. 4

    使用自定义适配器过滤ListView

  5. 5

    使用自定义适配器未显示ListView

  6. 6

    使用自定义适配器获取检查的项目

  7. 7

    使用自定义数组适配器,ListFragment中的项目不会显示在Listview中

  8. 8

    如何使用自定义适配器将项目自动加载到ListView中

  9. 9

    使用自定义数组适配器,ListFragment中的项目不会显示在Listview中

  10. 10

    setOnClickListener不使用自定义适配器和自定义ListView触发

  11. 11

    使用自定义适配器的ListView中的自定义行

  12. 12

    在自定义ListView适配器中按项目时突出显示效果

  13. 13

    ListView自定义适配器对错误的项目OnScroll应用操作

  14. 14

    如何将项目动态添加到ListView的自定义适配器

  15. 15

    listview项目未在自定义适配器的getview方法中显示分配的值

  16. 16

    具有自定义适配器的ListView:一些项目被隐藏

  17. 17

    自定义适配器,然后单击ListView中的项目

  18. 18

    自定义listview适配器所选项目增量textview

  19. 19

    ListView自定义适配器丢失imageView

  20. 20

    自定义适配器显示RuntimeException-ListView

  21. 21

    自定义listview适配器上的OnclickListner

  22. 22

    ListView自定义适配器重复项

  23. 23

    自定义基础适配器到ListView

  24. 24

    Android ListView onClickListener自定义适配器

  25. 25

    自定义ListView适配器中的NullPointerException

  26. 26

    ListView自定义适配器丢失imageView

  27. 27

    Android自定义ListView /适配器

  28. 28

    在自定义适配器中遍历ListView

  29. 29

    Android ListView onItemclick以及自定义适配器

热门标签

归档