• Затираю ArrayList в ArrayAdapter, как правильно сделать?

    @Neonoviiwolf Автор вопроса
    subway: вот адаптер
    package www.finefood.ExpansionEditText;
    
    import android.app.Activity;
    import android.content.Context;
    import android.support.annotation.NonNull;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.Filter;
    import android.widget.Filterable;
    import android.widget.TextView;
    
    import java.util.ArrayList;
    
    import www.finefood.R;
    
    public class MyArrayAdapter extends ArrayAdapter<MyForArrayAdapter> implements Filterable {
    
        private ArrayList<MyForArrayAdapter> list = new ArrayList<>();
        private ArrayList<MyForArrayAdapter> listCopy = new ArrayList<>();
        private Activity context;
        private Integer resource;
        private LayoutInflater inflater;
    
        public MyArrayAdapter(Context context, int resource,
                              ArrayList<MyForArrayAdapter> list) {
            super(context, resource, list);
            this.resource = resource;
            this.context = (Activity) context;
            this.list = list;
            inflater = this.context.getLayoutInflater();
            listCopy.addAll(list); //тут
        }
    
        class ViewHolder {
            protected TextView text;
        }
    
        /**
         * При получении совпадения со вводом создаёт view список и заполняет его данными
         */
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view;
            String str = list.get(position).getNameProduct();
            ViewHolder viewHolder;
            if (convertView == null) {
                view = inflater.inflate(resource, null);
                viewHolder = new ViewHolder();
                viewHolder.text = (TextView) view.findViewById(R.id.text_view_array_adapter);
                view.setTag(viewHolder);
            } else {
                view = convertView;
                viewHolder = (ViewHolder) view.getTag();
            }
            if (viewHolder != null)
                viewHolder.text.setText(str);
            return view;
        }
    
        @Override
        public int getCount() {
            return list.size();
        }
    
        @Override
        public MyForArrayAdapter getItem(int position) {
            return list.get(position);
        }
    
        @NonNull
        @Override
        public Filter getFilter() {
            Filter filter = new Filter() {
                @Override
                protected FilterResults performFiltering(CharSequence charSequence) {
                    FilterResults filterResults = new FilterResults();
                    if (charSequence != null) {
                        list.clear(); // тут
                        list.addAll(listCopy); // тут
                        ArrayList<MyForArrayAdapter> tempList = new ArrayList<>();
                        for (int i = 0; list.size() > i; ++i) {
                            MyForArrayAdapter mfad = list.get(i);
                            if (mfad.getNameProduct().toLowerCase().contains(charSequence))
                                tempList.add(mfad);
                        }
                        filterResults.count = tempList.size();
                        filterResults.values = tempList;
                    }
                    return filterResults;
                }
    
                @Override
                protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
                    if (charSequence != null) {
                        ArrayList<MyForArrayAdapter> tempList = (ArrayList<MyForArrayAdapter>) filterResults.values;
                        clear();
                        for (int i = 0; tempList.size() > i; ++i)
                            add(tempList.get(i));
                    }
                    notifyDataSetChanged();
                }
            };
            return filter;
        }
    }
  • Затираю ArrayList в ArrayAdapter, как правильно сделать?

    @Neonoviiwolf Автор вопроса
    subway: чёт я не очень понял в конечном счёте вашу реализацию, применимо к моему варианту, т.к. у меня экземпляр класса и передаётся по ссылке, со String я как раз первое, что сделал. В итоге вчера раздумывал над клонированием массива, да и вы советовали копию делать, хотя смысл тратить память, в итоге щас слепил вот такую фигню, 3 строчки добавил и стало работать нормально, но поиск не рационален, так как каждый раз после ввода идёт поиск по всему arraylist, что не совсем рационально при больших значениях ( в конечном варианте ожидается около 20 тыс), но пока ток демка, то "И так сойдёт" =) но не откажусь от объяснений что сделать лучше.
    Ещё как вызвать в OnTextChanged Filter?
    427c63b9e2584c13ad31e8287eaaf3f5.png
  • Затираю ArrayList в ArrayAdapter, как правильно сделать?

    @Neonoviiwolf Автор вопроса
    Я не очень понимаю, как в AppCompatAutoCompleteTextView использовать RecyclerView, объясните плиз
  • Куда делся андроит SDK manager?

    @Neonoviiwolf Автор вопроса
    1110001111: javaFX, Spring к примеру. Поставить as я всегда успею, вопрос в том, чтобы снова заработала idea нормально
  • Куда делся андроит SDK manager?

    @Neonoviiwolf Автор вопроса
    этот вариант работает, я понимаю, но мне держать 2 ide не очень хочется, тем более что как таковой разницы с AS особой нету, но вот дополнительные возможности IDEA мне нужны
  • Куда делся андроит SDK manager?

    @Neonoviiwolf Автор вопроса
    1110001111: idea, я снёс sdk, т.к. он заглючил, а теперь не пойму как поставить заново. Старого варианта нема на сайте
  • Куда делся андроит SDK manager?

    @Neonoviiwolf Автор вопроса
    хз как там ставить теперь, вот что пишет
    07b46579d6ad4efa9f81a17f58f4c2ad.png
  • Куда делся андроит SDK manager?

    @Neonoviiwolf Автор вопроса
    Impeeeery: да это скрин с инета, чтобы было ясно что я ищу. Чет нарыл в инете, что теперь графической части не будет
    я уже снёс старое полностью, вот теперь как вернуть работоспособность IntelliJ IDEA
  • Клавиатура для программиста, какую выбрать?

    @Neonoviiwolf
    не знаю насчё райзена, но дефендор всегда был уныл по качеству
  • Почему не работает Log.i в этом коде?

    @Neonoviiwolf Автор вопроса
    ivan19631224: посмотрел, туда приходит null, почему-то из-за этого log не срабатывает.Переписал без анонимных, начало подавать признаки жизни, но не очень пойму как правильно записать код в publishResults в моём случаи:
    В адаптер у меня свой класс
    public class MyArrayAdapter extends ArrayAdapter<MyForArrayAdapter>

    в классе есть getProductName и getID, поиск нужен по productName
    //allMyForArrayAdapter = это ArrayList<String> - отдельно массив string productName  - хотя мне кажется это костылём
        private class MyFilter extends Filter {
    
            @Override
            protected FilterResults performFiltering(CharSequence charSequence) {
                charSequence = charSequence.toString().toLowerCase();
                FilterResults results = new FilterResults();
                if (charSequence.toString().length() > 0) {
                    ArrayList<String> stringList = new ArrayList<>();
                    for (int i = 0; allMyForArrayAdapter.size() > i; ++i) {
                        String str = allMyForArrayAdapter.get(i);
                        if (str.toLowerCase().contains(charSequence))
                            stringList.add(str);
                    }
                    results.count = stringList.size();
                    results.values = stringList;
                } else {
                    synchronized (this) {
                        results.values = allMyForArrayAdapter;
                        results.count = allMyForArrayAdapter.size();
                    }
                }
    
                return results;
            }
    
            @Override
            protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
    /**а что тут написать?*/
            }
        }
  • Почему не работает Log.i в этом коде?

    @Neonoviiwolf Автор вопроса
    Денис Загаевский: агась, вот я стал бы тратить время на сказки. Почему - я хз так. Единственное что удалось выяснить, выше кодом(его не привёл) я из другого массива, который передаю в этот адаптер, заполняю allMyForArrayAdapter, так вот, если обратиться к нему аналогично, то выдаёт длина "0", хотя у него длина такая же, как allMyForArrayAdapter, но хотя бы Log.i появляется.
  • Почему не работает Log.i в этом коде?

    @Neonoviiwolf Автор вопроса
    неа, Log.i("Test", charSequence.toString().length() + ""); выполняется, а на Log.i("Test", "а это не работает" + allMyForArrayAdapter.size()); нету вообще реакции. Как я понял это связано с анонимными классами
  • Можно ли скормить AutoCompleteTextView HashMap или придумать аналог?

    @Neonoviiwolf Автор вопроса
    Neonoviiwolf: да и getView в адаптере кажись не вызывается, хотя он вроде и совсем не нужен
  • Можно ли скормить AutoCompleteTextView HashMap или придумать аналог?

    @Neonoviiwolf Автор вопроса
    Денис Загаевский: Чёт мучал и не до конца понял, как работать с чёртом лысым=)
    вот чёрт
    public class StateArrayAdapter {
    
        private Integer ID;
        private String nameProduct;
    
        public StateArrayAdapter(Integer ID, String nameProduct) {
            this.ID = ID;
            this.nameProduct = nameProduct;
        }
    
        public Integer getID() {
            return ID;
        }
    
        public void setID(Integer ID) {
            this.ID = ID;
        }
    
        public String getNameProduct() {
            return nameProduct;
        }
    
        public void setNameProduct(String nameProduct) {
            this.nameProduct = nameProduct;
        }
    }

    вот адаптер
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.TextView;
    import www.finefood.R;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class SpecialArrayAdapter extends ArrayAdapter<StateArrayAdapter> {
    
        private LayoutInflater inflater;
        private int layout;
        private List<StateArrayAdapter> list;
    
        public SpecialArrayAdapter(Context context,
                                   int resource, int textViewResourceId,
                                   ArrayList<StateArrayAdapter> list) {
    
            super(context, resource, textViewResourceId, list);
            this.list = list;
            this.layout = resource;
            this.inflater = LayoutInflater.from(context);
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = inflater.inflate(this.layout, parent, false);
            TextView textView = (TextView) view.findViewById(R.id.text_view_array_adapter);
    
            StateArrayAdapter stateArrayAdapter = list.get(position);
            textView.setText(stateArrayAdapter.getNameProduct());
    
            return view;
        }
    }

    вот скармливаю
    private void addAdapter(Context context) {
            this.setAdapter(new SpecialArrayAdapter(context,
                    R.layout.list_item_array_adpter,R.id.text_view_array_adapter,
                    GetSQLCursorProductName.getInstance().list));
        }

    ну вообщем-то ошибок нет, но и поиска нет, проблема, что я дают массив StateArrayAdapter, по тому и не работает, как правильно сделать, пока не догодался
  • Можно ли скормить AutoCompleteTextView HashMap или придумать аналог?

    @Neonoviiwolf Автор вопроса
    значит готовых решений нема? вот блин, а другие подходы есть, кроме искать точное совпадение по string. Я сначала думал кидать двумерную коллекцию, но тут полагаю тоже свой адаптер делать.
  • Как решить проблему с концентрацией?

    @Neonoviiwolf
    вообще ставят в иных странах как гиперактивность, назначают таблетки и начинаешь работать как робот. Но если материал абсолютно не интересен на уровне подсознания, то увы, так будет у подавляющего большинства
  • Свой слушатель событий в Android?

    @Neonoviiwolf Автор вопроса
    разобрался, теперь работает=)