AutoCompleteTextView во всплывающем окне в MainActivity

В MainActivity у меня есть всплывающее окно с AutoCompleteTextView, и оно работает. Я даже могу сделать с этим некоторые кадры (например, textView.setText("New")). Но меня беспокоит адаптер, потому что после нажатия TextView ничего не происходит (нет списка и клавиатуры).

Я думаю, что проблема в линии:

ArrayAdapter<String> adapter = new ArrayAdapter <String (customView.getContext(),android.R.layout.simple_dropdown_item_1line, countryNameList);

Особенно по первому параметру - контексту. Я не знаю, что я должен положить туда. Мой код:

public void steptwo() {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE);
        View customView = inflater.inflate(R.layout.popup_observedproperty,null);

        mPopupWindow = new PopupWindow(
                customView,
                LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT
        );

        String[] countryNameList = {"India", "China", "Australia", "New Zealand", "England", "Pakistan"};

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(customView.getContext(),
                android.R.layout.simple_dropdown_item_1line, countryNameList);
        AutoCompleteTextView textView = (AutoCompleteTextView) customView.findViewById(R.id.autoCompleteTextView);
        textView.setText("New");
        textView.setAdapter(adapter);

        if (Build.VERSION.SDK_INT>=21){
            mPopupWindow.setElevation(5.0f);
        }

        mPopupWindow.showAtLocation(mRelativeLayout, Gravity.CENTER,0,0);
    }

Попробуйте customView.getActivity() @here Адаптер ArrayAdapter<String> = new ArrayAdapter<String>(customView.getContext(), android.R.layout.simple_dropdown_item_1line, countryNameList);

Nice umang 11.07.2019 14:52

customView не имеет метода getActivity

newNianek 11.07.2019 14:56
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно сделать PopupWindow фокусируемым. Чтобы разрешить AutoCompleteTextView немедленно открывать клавиатуру, установите SoftInputMode для PopupWindow как SOFT_INPUT_STATE_ALWAYS_VISIBLE.

public void steptwo() {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE);
        View customView = inflater.inflate(R.layout.popup_observedproperty,null);

        mPopupWindow = new PopupWindow(
                customView,
                LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT
        );

        String[] countryNameList = {"India", "China", "Australia", "New Zealand", "England", "Pakistan"};

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(customView.getContext(),
                android.R.layout.simple_dropdown_item_1line, countryNameList);
        AutoCompleteTextView textView = (AutoCompleteTextView) customView.findViewById(R.id.autoCompleteTextView);
        textView.setText("New");
        textView.setAdapter(adapter);
        textView.setThreshold(1);

        if (Build.VERSION.SDK_INT>=21){
            mPopupWindow.setElevation(5.0f);
        }
        mPopupWindow.setFocusable(true);

        mPopupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
        mPopupWindow.showAtLocation(mRelativeLayout, Gravity.CENTER,0,0);
    }

Клавиатура показывает сейчас. Но когда я начинаю печатать, приложение вылетает, и я получаю: 2019-07-11 15:05:07.837 15843-15843/com.example.myapplication E/MPlugin: Unsupported class: com.mediatek.common.telephony.IOnlyOwnerSimSupport 2019-07-11 15:05:19.790 15843-15843/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.myapplication, PID: 15843 android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRootImpl$W@943a1d5 is not valid; is your activity running?

newNianek 11.07.2019 15:06

Я думаю, вы, возможно, пытаетесь finish свою активность, пока ваш PopupWindow не работает.

Chrisvin Jem 11.07.2019 15:21

Кстати, вы не можете запустить свой PopupWindow в onCreate, ваша активность должна быть запущена, чтобы PopupWindow получил окно, к которому он может прикрепиться.

Chrisvin Jem 11.07.2019 15:22

Спасибо за вашу помощь. Я не запускал всплывающее окно в onCreate. Я столкнулся с другой странной проблемой: когда я набираю какую-то букву, которая не соответствует моей опции countryNameList, я не получаю ошибку - все в порядке; но когда мое набранное письмо подходит под любую опцию, например, «Ne» (чтобы получить Новую Зеландию), приложение вылетает с той же ошибкой, что и выше. У вас похожее поведение?

newNianek 11.07.2019 22:23

Я не получил никаких ошибок. Опубликуйте весь код своей активности, и я смогу дать вам представление о том, что происходит не так.

Chrisvin Jem 11.07.2019 22:35

Я предполагаю, что раскрывающийся список вызывается до вызова методов жизненного цикла.

Chrisvin Jem 11.07.2019 22:37

Я не могу определить какие-либо проблемы в вашем коде, вы можете опубликовать другой вопрос на StackOverflow, возможно, кто-то еще может знать проблему.

Chrisvin Jem 12.07.2019 10:12

Вы можете попробовать заменить android.R.layout.simple_dropdown_item_1line на android.R.layout.simple_spinner_dropdown_item, но я сомневаюсь, что это исправит ситуацию.

Chrisvin Jem 12.07.2019 10:13

Подводя итог, счетчик работает во всплывающем окне, выпадающий список не работает.

newNianek 12.07.2019 15:40

Круто, отметьте мой ответ как правильный, если считаете, что он помог. :)

Chrisvin Jem 12.07.2019 21:41

Кстати, где вы можете найти какую-либо документацию или ссылку, в которой прямо указано, что во всплывающем окне работают только счетчики (и есть ли у вас какие-либо идеи, связана ли эта проблема с конкретным устройством или не зависит от него)?

Chrisvin Jem 12.07.2019 21:43

Другие вопросы по теме