Android ListView不按筛选器刷新

Android ListView不按筛选器刷新,android,android-listview,Android,Android Listview,在我的应用程序中,我有三个带有ViewPager的片段。其中一个片段是我从电话联系人列表中选择了简单的Arraylist作为ListView,在键入edittext后,我试图对其进行过滤。 但直到软键盘可见时才刷新,我必须隐藏键盘才能通过过滤字符串刷新列表视图 例如: editTextVideoFolderSearch = (EditText) rootView.findViewById(R.id.editTextVideoFolderSearch); editTextVideoFo

在我的应用程序中,我有三个带有
ViewPager
的片段。其中一个片段是我从电话联系人列表中选择了简单的
Arraylist
作为
ListView
,在键入
edittext
后,我试图对其进行过滤。 但直到软键盘可见时才刷新,我必须隐藏键盘才能通过过滤字符串刷新列表视图

例如:

     editTextVideoFolderSearch = (EditText) rootView.findViewById(R.id.editTextVideoFolderSearch);
editTextVideoFolderSearch.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence t, int start, int before,
                int count) {
            videoDetailBeansSearch.clear();
                for (int i = 0; i < videoDetailBeans_total.size(); i++) {
                    if (videoDetailBeans_total.get(i).getAlbum().toLowerCase()
                            .contains(t)) {
                        videoDetailBeansSearch.add(videoDetailBeans_total.get(i));
                    }
                }
                if (videoDetailBeansSearch.size() > 0) {
                    video_folder_gridView.setAdapter(new AlbumGridAdapter(getActivity(), videoDetailBeansSearch));
                } else {
                    video_folder_gridView.setAdapter(new AlbumGridAdapter(getActivity(), videoDetailBeansSearch));
                }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });
    private ArrayList<MediaDetailBean> videoDetailBeansSearch = new ArrayList<MediaDetailBean>();
    private ArrayList<MediaDetailBean> videoDetailBeans_total = new ArrayList<MediaDetailBean>();
    private ArrayList<MediaDetailBean> videoDetailBeans_delete = new ArrayList<MediaDetailBean>();
public class GetVideoAsynctask extends AsyncTask<String, String,Object[]> {

        ProgressDialog progressDialog ;
        String response = "";
        int offset, limit;

        public GetVideoAsynctask(int offset1, int limit1) {
          offset = offset1;
          limit = limit1;
        }

        @Override
        public void onPreExecute() {
            progressDialog = ProgressDialog.show(getActivity(),"Loading...", "Please Wait");
        }

        @Override
        public Object[] doInBackground(String... params) {

            return AppParsing.getMediaDetails(getActivity(), AppPreferenceUtils.getChildUploadDeviceId(getActivity()),
                                AppPreferenceUtils.getChildRaId(getActivity()),"2", offset, limit,"3"); 
        //// type=1 for image,2 for video,3 for audio
        }  

        @SuppressWarnings("unchecked")
        @Override
        public void onPostExecute(Object[] result) {
            progressDialog.cancel();
            try
            {
                boolean status = (Boolean) result[0];
                response = (String) result[1];

                if(status)
                {
                    videoDetailBeans = (ArrayList<MediaDetailBean>) result[2] ; 

                    for (int i = 0; i < videoDetailBeans.size(); i++) {
                        videoDetailBeans_total.add(videoDetailBeans.get(i));
                    }

                    isCheck_video = new boolean[videoDetailBeans_total.size()];

                    for(int i=0;i<videoDetailBeans_total.size();i++)
                    {
                        if(!GRID_DATA.contains(videoDetailBeans_total.get(i).getAlbum()))
                        {
                            GRID_DATA.add(videoDetailBeans_total.get(i).getAlbum());
                        }
                    }

                    video_folder_gridView.setAdapter(new AlbumGridAdapter(getActivity(), videoDetailBeans_total));

                    //Toast.makeText(getActivity(), response, Toast.LENGTH_SHORT).show();
                }
                else
                {
                    response = (String) result[1];
                    AppUtils.showDialog(getActivity(), response);
                }
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
new GetVideoAsynctask(offset1, limit1).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
com.costum.android.widget.LoadMoreListView) video_folder_gridView = (com.costum.android.widget.LoadMoreListView)     rootView.findViewById(R.id.video_folder_gridView);
   <com.costum.android.widget.LoadMoreListView
    android:id="@+id/video_folder_gridView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnWidth="90dp"
    android:gravity="center"
    android:horizontalSpacing="10dp"
    android:numColumns="auto_fit"
    android:stretchMode="columnWidth"
    android:verticalSpacing="10dp" />
按“a”筛选listview:

我的适配器:

public class AdapterContacts extends BaseAdapter implements Filterable {

    private LayoutInflater inflater;
    private Context context;
    private List<ContactLists> categoryArrayList;
    private final ArrayList<ContactLists> originalList = new ArrayList<ContactLists>();
    private NameFilter filter;

    public AdapterContacts(ArrayList<ContactLists> array) {
        categoryArrayList = array;
    }

    public AdapterContacts(Context context, List<ContactLists> array) {
        this.context = context;
        inflater = LayoutInflater.from(this.context);
        categoryArrayList = array;
        originalList.addAll(array);
    }

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

    @Override
    public ContactLists getItem(int position) {
        return categoryArrayList.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder mViewHolder;

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.layout_contacts_list_item, null);
            mViewHolder = new ViewHolder(convertView);
            convertView.setTag(mViewHolder);
        } else {
            mViewHolder = (ViewHolder) convertView.getTag();
        }

        ContactLists item = getItem(position);
        mViewHolder.fillItems(this, item, position);

        return convertView;
    }

    private static class UI extends HelperUI {
        public TextView tv_person_nickname_mobile_number;
        public TextView btn_invite_message;
        public ImageView img_contact_image;
        public ImageView imgv_user_rank;
        public TextView tv_contact_name;
        public LinearLayout ll_root;

        public UI(View view) {
            parseUi(view);
        }
    }

    private class ViewHolder {
        private UI UI;

        public ViewHolder(View view) {
            UI = new UI(view);
        }

        public void fillItems(final AdapterContacts adapter, final ContactLists item, final int position) {
            UI.tv_contact_name.setText(item.getContact_name());

            if (item.getStatus() == 1) {
                UI.btn_invite_message.setVisibility(View.GONE);
                UI.imgv_user_rank.setVisibility(View.VISIBLE);

                if (item.getRank() != null || !TextUtils.isEmpty(item.getRank())) {
                    //Picasso.with(G.context).load(item.getRank()).into(UI.imgv_user_rank);
                }

                UI.tv_person_nickname_mobile_number.setText(item.getNick_name());
                //UI.ll_root.setBackgroundDrawable(G.context.getResources().getDrawable(R.drawable.selector_button_actions));
                if (item.getContact_image() == null || TextUtils.isEmpty(item.getContact_image())) {
                    Bitmap bitmap = UC.getContactPhoto(item.getMobile_number(), G.context.getContentResolver());
                    if (bitmap != null) {
                        UI.img_contact_image.setImageBitmap(bitmap);
                    } else {
                        UI.img_contact_image.setImageDrawable(G.context.getResources().getDrawable(R.drawable.no_avatar));
                    }
                } else {
                    // show user avatar from web
                    //Picasso.with(G.context).load(item.getContact_image()).into(UI.img_contact_image);
                    UI.img_contact_image.setImageBitmap(BitmapFactory.decodeFile(G.dir_image + "/" + item.getContact_image()));
                }
            } else {
                // UI.ll_root.setBackgroundDrawable(G.context.getResources().getDrawable(R.drawable.selector_invite_actions));
                UI.btn_invite_message.setVisibility(View.VISIBLE);
                UI.imgv_user_rank.setVisibility(View.GONE);
                UI.btn_invite_message.setText(UC.getString(R.string.invite_person));
                UI.btn_invite_message.setBackgroundDrawable(G.context.getResources().getDrawable(R.drawable.shape_invite_button_default));
                UI.tv_person_nickname_mobile_number.setText(item.getMobile_number());
                Bitmap bitmap = UC.getContactPhoto(item.getMobile_number(), G.context.getContentResolver());
                if (bitmap != null) {
                    UI.img_contact_image.setImageBitmap(bitmap);
                } else {
                    UI.img_contact_image.setImageDrawable(G.context.getResources().getDrawable(R.drawable.no_avatar));
                }
            }
        }
    }

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

    public class NameFilter extends Filter {
        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            FilterResults results = new FilterResults();

            String searchText = constraint.toString().toLowerCase();
            ArrayList<ContactLists> newList = filterListBasedOnSearchText(searchText);
            results.values = newList;
            results.count = newList.size();

            return results;
        }

        private ArrayList<ContactLists> filterListBasedOnSearchText(String constraint) {
            ArrayList<ContactLists> newList = new ArrayList<ContactLists>();

            int l = originalList.size();
            for (int i = 0; i < l; i++) {
                ContactLists nameList = originalList.get(i);

                if (nameList.getContact_name().toString().contains(constraint)) {
                    newList.add(nameList);
                }
            }

            return newList;
        }

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint,
                FilterResults results) {
            categoryArrayList = (ArrayList<ContactLists>) results.values;
            notifyDataSetChanged();
        }
    }
}
在不具备适配器功能的情况下在片段中进行过滤的另一种方法

edt_sample.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }

    @Override
    public void afterTextChanged(Editable s) {
        String text = edt_sample.getText().toString();
        filter(text);
    }
});

public void filter(String charText) {
    drinks.clear();
    if (charText.length() == 0) {
        drinks.addAll(contact_list);
    } else {
        for (ContactLists wp : contact_list) {
            if (wp.getContact_name().contains(charText)) {
                drinks.add(wp);
            }
        }
    }
    contact_list.clear();
    contact_list.addAll(drinks);
    adapter.notifyDataSetChanged();
}

当我关闭或隐藏使用nw项刷新的软键盘时,ListView成功地按筛选。

从您发布的代码中可以看出,您没有使用适配器筛选器。我将在这里发布一个示例过滤器以及如何调用它(保留所有变量名以使其更简单)

适配器类中的“NameFilter”类:

public class NameFilter extends Filter {
    @Override
    protected FilterResults performFiltering(CharSequence constraint) {
        FilterResults results = new FilterResults();

        String searchText = constraint.toString().toLowerCase();
        ArrayList<ContactLists> newList = filterListBasedOnSearchText(searchText);
        results.values = newList;
        results.count = newList.size();

        return results;
    }

    private ArrayList<ContactLists> filterListBasedOnSearchText(String constraint) {
        ArrayList<ContactLists> newList = new ArrayList<ContactLists>();

        int l = originalList.size();
        for (int i = 0; i < l; i++) {
            ContactLists nameList = originalList.get(i);

            if (nameList.getContact_name().toString().contains(constraint)) {
                newList.add(nameList);
            }
        }

        return newList;
    }

    @SuppressWarnings("unchecked")
    @Override
    protected void publishResults(CharSequence constraint,
            FilterResults results) {
        categoryArrayList = (ArrayList<ContactLists>) results.values;
        notifyDataSetChanged();
    }
}
此外,一些意见:

  • 如果“联系人列表”是联系人,请将其命名为“联系人”,以避免混淆
  • 我会使用“搜索视图”,而不是“编辑文本”
  • 我不知道你是如何得到联系人名单的,但是有一个指南(如果你还没有看的话)

实现起来非常简单。请按照以下步骤操作:

步骤1: 初始化编辑文本:

     editTextVideoFolderSearch = (EditText) rootView.findViewById(R.id.editTextVideoFolderSearch);
editTextVideoFolderSearch.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence t, int start, int before,
                int count) {
            videoDetailBeansSearch.clear();
                for (int i = 0; i < videoDetailBeans_total.size(); i++) {
                    if (videoDetailBeans_total.get(i).getAlbum().toLowerCase()
                            .contains(t)) {
                        videoDetailBeansSearch.add(videoDetailBeans_total.get(i));
                    }
                }
                if (videoDetailBeansSearch.size() > 0) {
                    video_folder_gridView.setAdapter(new AlbumGridAdapter(getActivity(), videoDetailBeansSearch));
                } else {
                    video_folder_gridView.setAdapter(new AlbumGridAdapter(getActivity(), videoDetailBeansSearch));
                }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });
    private ArrayList<MediaDetailBean> videoDetailBeansSearch = new ArrayList<MediaDetailBean>();
    private ArrayList<MediaDetailBean> videoDetailBeans_total = new ArrayList<MediaDetailBean>();
    private ArrayList<MediaDetailBean> videoDetailBeans_delete = new ArrayList<MediaDetailBean>();
public class GetVideoAsynctask extends AsyncTask<String, String,Object[]> {

        ProgressDialog progressDialog ;
        String response = "";
        int offset, limit;

        public GetVideoAsynctask(int offset1, int limit1) {
          offset = offset1;
          limit = limit1;
        }

        @Override
        public void onPreExecute() {
            progressDialog = ProgressDialog.show(getActivity(),"Loading...", "Please Wait");
        }

        @Override
        public Object[] doInBackground(String... params) {

            return AppParsing.getMediaDetails(getActivity(), AppPreferenceUtils.getChildUploadDeviceId(getActivity()),
                                AppPreferenceUtils.getChildRaId(getActivity()),"2", offset, limit,"3"); 
        //// type=1 for image,2 for video,3 for audio
        }  

        @SuppressWarnings("unchecked")
        @Override
        public void onPostExecute(Object[] result) {
            progressDialog.cancel();
            try
            {
                boolean status = (Boolean) result[0];
                response = (String) result[1];

                if(status)
                {
                    videoDetailBeans = (ArrayList<MediaDetailBean>) result[2] ; 

                    for (int i = 0; i < videoDetailBeans.size(); i++) {
                        videoDetailBeans_total.add(videoDetailBeans.get(i));
                    }

                    isCheck_video = new boolean[videoDetailBeans_total.size()];

                    for(int i=0;i<videoDetailBeans_total.size();i++)
                    {
                        if(!GRID_DATA.contains(videoDetailBeans_total.get(i).getAlbum()))
                        {
                            GRID_DATA.add(videoDetailBeans_total.get(i).getAlbum());
                        }
                    }

                    video_folder_gridView.setAdapter(new AlbumGridAdapter(getActivity(), videoDetailBeans_total));

                    //Toast.makeText(getActivity(), response, Toast.LENGTH_SHORT).show();
                }
                else
                {
                    response = (String) result[1];
                    AppUtils.showDialog(getActivity(), response);
                }
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
new GetVideoAsynctask(offset1, limit1).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
com.costum.android.widget.LoadMoreListView) video_folder_gridView = (com.costum.android.widget.LoadMoreListView)     rootView.findViewById(R.id.video_folder_gridView);
   <com.costum.android.widget.LoadMoreListView
    android:id="@+id/video_folder_gridView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnWidth="90dp"
    android:gravity="center"
    android:horizontalSpacing="10dp"
    android:numColumns="auto_fit"
    android:stretchMode="columnWidth"
    android:verticalSpacing="10dp" />
步骤2: 在此edittext上添加TextChangedListener。比如:

     editTextVideoFolderSearch = (EditText) rootView.findViewById(R.id.editTextVideoFolderSearch);
editTextVideoFolderSearch.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence t, int start, int before,
                int count) {
            videoDetailBeansSearch.clear();
                for (int i = 0; i < videoDetailBeans_total.size(); i++) {
                    if (videoDetailBeans_total.get(i).getAlbum().toLowerCase()
                            .contains(t)) {
                        videoDetailBeansSearch.add(videoDetailBeans_total.get(i));
                    }
                }
                if (videoDetailBeansSearch.size() > 0) {
                    video_folder_gridView.setAdapter(new AlbumGridAdapter(getActivity(), videoDetailBeansSearch));
                } else {
                    video_folder_gridView.setAdapter(new AlbumGridAdapter(getActivity(), videoDetailBeansSearch));
                }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });
    private ArrayList<MediaDetailBean> videoDetailBeansSearch = new ArrayList<MediaDetailBean>();
    private ArrayList<MediaDetailBean> videoDetailBeans_total = new ArrayList<MediaDetailBean>();
    private ArrayList<MediaDetailBean> videoDetailBeans_delete = new ArrayList<MediaDetailBean>();
public class GetVideoAsynctask extends AsyncTask<String, String,Object[]> {

        ProgressDialog progressDialog ;
        String response = "";
        int offset, limit;

        public GetVideoAsynctask(int offset1, int limit1) {
          offset = offset1;
          limit = limit1;
        }

        @Override
        public void onPreExecute() {
            progressDialog = ProgressDialog.show(getActivity(),"Loading...", "Please Wait");
        }

        @Override
        public Object[] doInBackground(String... params) {

            return AppParsing.getMediaDetails(getActivity(), AppPreferenceUtils.getChildUploadDeviceId(getActivity()),
                                AppPreferenceUtils.getChildRaId(getActivity()),"2", offset, limit,"3"); 
        //// type=1 for image,2 for video,3 for audio
        }  

        @SuppressWarnings("unchecked")
        @Override
        public void onPostExecute(Object[] result) {
            progressDialog.cancel();
            try
            {
                boolean status = (Boolean) result[0];
                response = (String) result[1];

                if(status)
                {
                    videoDetailBeans = (ArrayList<MediaDetailBean>) result[2] ; 

                    for (int i = 0; i < videoDetailBeans.size(); i++) {
                        videoDetailBeans_total.add(videoDetailBeans.get(i));
                    }

                    isCheck_video = new boolean[videoDetailBeans_total.size()];

                    for(int i=0;i<videoDetailBeans_total.size();i++)
                    {
                        if(!GRID_DATA.contains(videoDetailBeans_total.get(i).getAlbum()))
                        {
                            GRID_DATA.add(videoDetailBeans_total.get(i).getAlbum());
                        }
                    }

                    video_folder_gridView.setAdapter(new AlbumGridAdapter(getActivity(), videoDetailBeans_total));

                    //Toast.makeText(getActivity(), response, Toast.LENGTH_SHORT).show();
                }
                else
                {
                    response = (String) result[1];
                    AppUtils.showDialog(getActivity(), response);
                }
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
new GetVideoAsynctask(offset1, limit1).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
com.costum.android.widget.LoadMoreListView) video_folder_gridView = (com.costum.android.widget.LoadMoreListView)     rootView.findViewById(R.id.video_folder_gridView);
   <com.costum.android.widget.LoadMoreListView
    android:id="@+id/video_folder_gridView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnWidth="90dp"
    android:gravity="center"
    android:horizontalSpacing="10dp"
    android:numColumns="auto_fit"
    android:stretchMode="columnWidth"
    android:verticalSpacing="10dp" />
第6步:最重要的细化是我正在加载更多列表视图:

     editTextVideoFolderSearch = (EditText) rootView.findViewById(R.id.editTextVideoFolderSearch);
editTextVideoFolderSearch.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence t, int start, int before,
                int count) {
            videoDetailBeansSearch.clear();
                for (int i = 0; i < videoDetailBeans_total.size(); i++) {
                    if (videoDetailBeans_total.get(i).getAlbum().toLowerCase()
                            .contains(t)) {
                        videoDetailBeansSearch.add(videoDetailBeans_total.get(i));
                    }
                }
                if (videoDetailBeansSearch.size() > 0) {
                    video_folder_gridView.setAdapter(new AlbumGridAdapter(getActivity(), videoDetailBeansSearch));
                } else {
                    video_folder_gridView.setAdapter(new AlbumGridAdapter(getActivity(), videoDetailBeansSearch));
                }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });
    private ArrayList<MediaDetailBean> videoDetailBeansSearch = new ArrayList<MediaDetailBean>();
    private ArrayList<MediaDetailBean> videoDetailBeans_total = new ArrayList<MediaDetailBean>();
    private ArrayList<MediaDetailBean> videoDetailBeans_delete = new ArrayList<MediaDetailBean>();
public class GetVideoAsynctask extends AsyncTask<String, String,Object[]> {

        ProgressDialog progressDialog ;
        String response = "";
        int offset, limit;

        public GetVideoAsynctask(int offset1, int limit1) {
          offset = offset1;
          limit = limit1;
        }

        @Override
        public void onPreExecute() {
            progressDialog = ProgressDialog.show(getActivity(),"Loading...", "Please Wait");
        }

        @Override
        public Object[] doInBackground(String... params) {

            return AppParsing.getMediaDetails(getActivity(), AppPreferenceUtils.getChildUploadDeviceId(getActivity()),
                                AppPreferenceUtils.getChildRaId(getActivity()),"2", offset, limit,"3"); 
        //// type=1 for image,2 for video,3 for audio
        }  

        @SuppressWarnings("unchecked")
        @Override
        public void onPostExecute(Object[] result) {
            progressDialog.cancel();
            try
            {
                boolean status = (Boolean) result[0];
                response = (String) result[1];

                if(status)
                {
                    videoDetailBeans = (ArrayList<MediaDetailBean>) result[2] ; 

                    for (int i = 0; i < videoDetailBeans.size(); i++) {
                        videoDetailBeans_total.add(videoDetailBeans.get(i));
                    }

                    isCheck_video = new boolean[videoDetailBeans_total.size()];

                    for(int i=0;i<videoDetailBeans_total.size();i++)
                    {
                        if(!GRID_DATA.contains(videoDetailBeans_total.get(i).getAlbum()))
                        {
                            GRID_DATA.add(videoDetailBeans_total.get(i).getAlbum());
                        }
                    }

                    video_folder_gridView.setAdapter(new AlbumGridAdapter(getActivity(), videoDetailBeans_total));

                    //Toast.makeText(getActivity(), response, Toast.LENGTH_SHORT).show();
                }
                else
                {
                    response = (String) result[1];
                    AppUtils.showDialog(getActivity(), response);
                }
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
new GetVideoAsynctask(offset1, limit1).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
com.costum.android.widget.LoadMoreListView) video_folder_gridView = (com.costum.android.widget.LoadMoreListView)     rootView.findViewById(R.id.video_folder_gridView);
   <com.costum.android.widget.LoadMoreListView
    android:id="@+id/video_folder_gridView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnWidth="90dp"
    android:gravity="center"
    android:horizontalSpacing="10dp"
    android:numColumns="auto_fit"
    android:stretchMode="columnWidth"
    android:verticalSpacing="10dp" />
步骤7:在我的xml中,我这样声明:

     editTextVideoFolderSearch = (EditText) rootView.findViewById(R.id.editTextVideoFolderSearch);
editTextVideoFolderSearch.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence t, int start, int before,
                int count) {
            videoDetailBeansSearch.clear();
                for (int i = 0; i < videoDetailBeans_total.size(); i++) {
                    if (videoDetailBeans_total.get(i).getAlbum().toLowerCase()
                            .contains(t)) {
                        videoDetailBeansSearch.add(videoDetailBeans_total.get(i));
                    }
                }
                if (videoDetailBeansSearch.size() > 0) {
                    video_folder_gridView.setAdapter(new AlbumGridAdapter(getActivity(), videoDetailBeansSearch));
                } else {
                    video_folder_gridView.setAdapter(new AlbumGridAdapter(getActivity(), videoDetailBeansSearch));
                }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });
    private ArrayList<MediaDetailBean> videoDetailBeansSearch = new ArrayList<MediaDetailBean>();
    private ArrayList<MediaDetailBean> videoDetailBeans_total = new ArrayList<MediaDetailBean>();
    private ArrayList<MediaDetailBean> videoDetailBeans_delete = new ArrayList<MediaDetailBean>();
public class GetVideoAsynctask extends AsyncTask<String, String,Object[]> {

        ProgressDialog progressDialog ;
        String response = "";
        int offset, limit;

        public GetVideoAsynctask(int offset1, int limit1) {
          offset = offset1;
          limit = limit1;
        }

        @Override
        public void onPreExecute() {
            progressDialog = ProgressDialog.show(getActivity(),"Loading...", "Please Wait");
        }

        @Override
        public Object[] doInBackground(String... params) {

            return AppParsing.getMediaDetails(getActivity(), AppPreferenceUtils.getChildUploadDeviceId(getActivity()),
                                AppPreferenceUtils.getChildRaId(getActivity()),"2", offset, limit,"3"); 
        //// type=1 for image,2 for video,3 for audio
        }  

        @SuppressWarnings("unchecked")
        @Override
        public void onPostExecute(Object[] result) {
            progressDialog.cancel();
            try
            {
                boolean status = (Boolean) result[0];
                response = (String) result[1];

                if(status)
                {
                    videoDetailBeans = (ArrayList<MediaDetailBean>) result[2] ; 

                    for (int i = 0; i < videoDetailBeans.size(); i++) {
                        videoDetailBeans_total.add(videoDetailBeans.get(i));
                    }

                    isCheck_video = new boolean[videoDetailBeans_total.size()];

                    for(int i=0;i<videoDetailBeans_total.size();i++)
                    {
                        if(!GRID_DATA.contains(videoDetailBeans_total.get(i).getAlbum()))
                        {
                            GRID_DATA.add(videoDetailBeans_total.get(i).getAlbum());
                        }
                    }

                    video_folder_gridView.setAdapter(new AlbumGridAdapter(getActivity(), videoDetailBeans_total));

                    //Toast.makeText(getActivity(), response, Toast.LENGTH_SHORT).show();
                }
                else
                {
                    response = (String) result[1];
                    AppUtils.showDialog(getActivity(), response);
                }
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
new GetVideoAsynctask(offset1, limit1).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
com.costum.android.widget.LoadMoreListView) video_folder_gridView = (com.costum.android.widget.LoadMoreListView)     rootView.findViewById(R.id.video_folder_gridView);
   <com.costum.android.widget.LoadMoreListView
    android:id="@+id/video_folder_gridView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:columnWidth="90dp"
    android:gravity="center"
    android:horizontalSpacing="10dp"
    android:numColumns="auto_fit"
    android:stretchMode="columnWidth"
    android:verticalSpacing="10dp" />


如果您对这个概念有任何疑问,请随意。

这是我的筛选器实现,它在您键入单个字母时进行筛选。这是活动实现

 public class MessagesActivity extends Activity{

       private ListView msgListView;
       private EditText mSearchContent;
       private MessagesAdapter msgAdapter;
       public static ArrayList<MessagesBean> allMsgsList = new ArrayList<MessagesBean>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_messages);
            init();
            msgAdapter = new MessagesAdapter(getApplicationContext(), allMsgsList, MessagesActivity.this);
            msgListView.setAdapter(msgAdapter);
    }
    private void init() {
            // TODO Auto-generated method stub
            msgListView = (ListView) findViewById(R.id.messages_list);
            msgListView.setOnScrollListener(this);


            mSearchContent.addTextChangedListener(new TextWatcher() {
                public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
                }

                public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
                }

                public void afterTextChanged(Editable s) {

                    msgAdapter.getFilter().filter(s.toString());
                }
            });


}
公共类消息活动扩展活动{
私有列表视图msgListView;
私人编辑文本内容;
私有消息适配器msgAdapter;
public static ArrayList allMsgsList=new ArrayList();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_消息);
init();
msgAdapter=newmessagesadapter(getApplicationContext(),allMsgsList,MessagesActivity.this);
msgListView.setAdapter(msgAdapter);
}
私有void init(){
//TODO自动生成的方法存根
msgListView=(ListView)findViewById(R.id.messages\u列表);
msgListView.setOnScrollListener(此);
mSearchContent.addTextChangedListener(新的TextWatcher(){
public void onTextChanged(字符序列arg0、int arg1、int arg2、int arg3){
}
更改前的公共void(字符序列arg0、int arg1、int arg2、int arg3){
}
公共无效后文本已更改(可编辑){
msgAdapter.getFilter().filter(s.toString());
}
});
}
这是适配器实现

public class MessagesAdapter extends BaseAdapter implements Filterable {

    private Context mcontext;
    private ArrayList<MessagesBean> all_details, dup_all_details;
    private LayoutInflater inflater;
    private DisplayImageOptions options;
    private CustomClickLisntener clickLisntener;

    private MessagesBean mMessagesBean;
    private ViewHolder selectedHolder;
    private ListViewFilter listviewFilter;

    // int pos = 0;
    public MessagesAdapter(Context context, ArrayList<MessagesBean> all_list, CustomClickLisntener lisntener) {
        mcontext = context;
        all_details = all_list;

        clickLisntener = lisntener;
        inflater = (LayoutInflater) mcontext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        options = new DisplayImageOptions.Builder().cacheInMemory(true).cacheOnDisk(true).build();
        dup_all_details = all_list;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return all_details.size();
    }

    @Override
    public MessagesBean getItem(int position) {
        // TODO Auto-generated method stub
        return all_details.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    static class ViewHolder {
        TextView user_name, msg_sub, msg_content, msg_time;
        ImageView user_image;

    }

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

            viewholder.user_name = (TextView) convertView.findViewById(R.id.user_name);
            viewholder.msg_time = (TextView) convertView.findViewById(R.id.msg_time);
            viewholder.msg_sub = (TextView) convertView.findViewById(R.id.msg_subject);
            viewholder.user_image = (ImageView) convertView.findViewById(R.id.user_image);
            viewholder.msg_content = (TextView) convertView.findViewById(R.id.msg_content);

            // viewholder.down_arrow.setTag(position);
            convertView.setTag(viewholder);

        } else {
            viewholder = (ViewHolder) convertView.getTag();
        }

        mMessagesBean = all_details.get(position);
        viewholder.user_name.setText(mMessagesBean.getFirstname().trim() + " " + mMessagesBean.getLastname());
        viewholder.msg_time.setText(DateDifferent.getDateDifferance(mMessagesBean.getSentDate()));
        viewholder.msg_sub.setText(mMessagesBean.getSubject());
        viewholder.msg_content.setText(mMessagesBean.getMessage());

        ImageLoader.getInstance().displayImage(mMessagesBean.getUserimage(), viewholder.user_image, options);

        return convertView;
    }

    @Override
    public Filter getFilter() {
        // TODO Auto-generated method stub
        if (listviewFilter == null) {
            listviewFilter = new ListViewFilter();

        }
        return listviewFilter;
    }

    public class ListViewFilter extends Filter {

        @Override
        protected FilterResults performFiltering(CharSequence constraint) {
            // TODO Auto-generated method stub
            constraint = constraint.toString();

            ArrayList<MessagesBean> allitems = new ArrayList<MessagesBean>();

            FilterResults filterresults = new FilterResults();

            if (constraint != null && constraint.toString().length() > 0) {

                for (int i = 0; i < dup_all_details.size(); i++) {

                    if (dup_all_details.get(i).getFirstname().contains(constraint)
                            || dup_all_details.get(i).getLastname().contains(constraint)) {
                        allitems.add(dup_all_details.get(i));

                    }

                }

                filterresults.count = allitems.size();
                filterresults.values = allitems;

            } else {

                System.out.println(" iam here..." + all_details.size());

                synchronized (this) {
                    filterresults.count = allitems.size();
                    filterresults.values = allitems;
                }

            }

            return filterresults;
        }

        @SuppressWarnings("unchecked")
        @Override
        protected void publishResults(CharSequence constraint, FilterResults results) {
            // TODO Auto-generated method stub

            all_details = (ArrayList<MessagesBean>) results.values;
            MessagesActivity.allMsgsList = all_details;
            MessagesAdapter.this.notifyDataSetChanged();

        }

    }

}
公共类MessagesAdapter扩展BaseAdapter实现可过滤{
私有上下文;
private ArrayList all_details,dup_all_details;
私人充气机;
私有显示图像选项;
私人定制ClickListener ClickListener;
私有消息bean-mMessagesBean;
私人视窗持有者选择的视窗持有者;
私有ListViewFilter ListViewFilter;
//int pos=0;
公共消息适配器(上下文、数组列表、所有列表、自定义ClickListener Listener){
mcontext=上下文;
所有_详情=所有_列表;
单击Listener=Listener;
充气器=(LayoutInflater)mcontext.getSystemService(Context.LAYOUT\u充气器\u SERVICE);
选项=新建DisplayImageOptions.Builder().cacheInMemory(true).cacheOnDisk(true).build();
dup_all_details=所有_列表;
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回所有_详细信息。size();
}
@凌驾
公共消息Bean getItem(int位置){
//TODO自动生成的方法存根
返回所有_详细信息。获取(位置);
}
@凌驾
公共长getItemId(int位置){
//TODO自动生成的方法存根
返回位置;
}
静态类视窗夹{
text查看用户名、消息子项、消息内容、消息时间;
图像查看用户图像;
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
ViewHolder ViewHolder=null;
if(convertView==null){
viewholder=新的viewholder();
convertView=充气机。充气(R.layout.row\u item\u inbox\u msg,空);
viewholder.user\u name=(TextView)convertView.findViewById(R.id.user\u name);
viewholder.msg_time=(TextView)convertView.findViewById(R.id.msg_time);
viewholder.msg_sub=(TextView)convertView.findViewById(R.id.msg_subject);
viewholder.user\u image=(ImageView)convertView.findViewById(R.id.user\u image);
viewholder.msg_content=(TextView)convertView.findViewById(R.id.msg_content);
//viewholder.向下箭头.setTag(位置);
convertView.setTag(viewholder);
}否则{
viewholder=(viewholder)convertView.getTag();
}
mMessagesBean=all_details.get(位置);
viewholder.user_name.setText(mMessagesBean.getFirstname().trim()+“”+mMessagesBean.getLastname());
viewholder.msg_time.setText(DateDifferent.getDateDifferance(mMessagesBean.getSentDate());
msg_sub.setText(mMessagesBean.getSubject());
viewholder.msg_content.setText(mMessagesBean.getMessage());
ImageLoader.getInstance().displayImage(mmessageBean.getUserimage(),viewholder.user_image,选项);
返回视图;
}
@越过