Как искать элементы в BaseAdapter Fragmenr, используя EditText в MainActivity? - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь найти элемент из imageAdapter, который расширяет BaseAdapter, который находится в Frangment, используя EditText в MainActivity. Мой план состоит в том, чтобы вызвать метод getFilter () BaseAdapter в методе onTextChanged. Для вызова getFilter () в MainActivity мне нужно сделать его stati c, а также imageAdapter, но при этом getLayoutInflator () попросит сделать imageAdapter не-stati c и @Override станет недействительным. Код как ниже

public class imageAdapater extends BaseAdapter implements Filterable 
    {
        private List<String>originalData = null;
        private List<String>filteredData = null;
        private LayoutInflater mInflater;
        private ItemFilter mFilter = new ItemFilter();

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

        @Override
        public Object getItem(int i)
        {
            return imageList.get(i);
        }

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

        @Override
        public View getView(int i, View view, ViewGroup viewGroup)
        {
            View galleryView = null;
            if(galleryView == null)
            {
                galleryView = getLayoutInflater().inflate(R.layout.image_layout_for_gallery, viewGroup, false); //Problem occurs here when imageAdapter is made static
                ImageView sampleImage = (ImageView)  galleryView.findViewById(R.id.sampleImage);
                TextView sampleImageName = (TextView) galleryView.findViewById(R.id.sampleImageName);
                sampleImage.setImageURI(Uri.parse(imageList.get(i).toString()));
                sampleImageName.setText(imageNameList.get(i));
            }

            return galleryView;
        }

        @Override
        public Filter getFilter() //Problem occurs here when getFilter() is made static
        {
            return null;
        }

        private class ItemFilter extends Filter
        {
            @Override
            protected FilterResults performFiltering(CharSequence constraint) {

                String filterString = constraint.toString().toLowerCase();

                FilterResults results = new FilterResults();

                final List<String> list = originalData;

                int count = list.size();
                final ArrayList<String> nlist = new ArrayList<String>(count);

                String filterableString ;

                for (int i = 0; i < count; i++) {
                    filterableString = list.get(i);
                    if (filterableString.toLowerCase().contains(filterString)) {
                        nlist.add(filterableString);
                    }
                }

                results.values = nlist;
                results.count = nlist.size();

                return results;
            }

            @SuppressWarnings("unchecked")
            @Override
            protected void publishResults(CharSequence constraint, FilterResults results) {
                filteredData = (ArrayList<String>) results.values;
                notifyDataSetChanged();
            }

        }
    }
...