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

Моя проблема в том, что performClick() и callOnClick(), кажется, даже не вызваны. У каждой кнопки есть свой Слушатель (ручные нажатия работают).

В качестве примечания: я вызываю методы click вне моей деятельности. Это проблема?

Как мне заставить эти методы действительно вызывать onClick моих кнопок?

PS: Может быть, некоторые предложения будут заключаться в использовании функции direclty вместо использования события click. Во-первых, почему я не хочу этого делать, это то, что я хочу избежать дублирования кода или реструктуризации кода, а во-вторых, я бы хотел, чтобы распознавание голоса не было слишком глубоко зашито в код, ведя себя как простой пользователь (отсюда и программный клик).

РЕДАКТИРОВАТЬ:

В основном я не делаю ничего, кроме:

Из моей основной деятельности я называю свой класс помощников:

util = new MainVoiceUtil(this, getLayoutInflater(), viewgroup);

viewgroup здесь не имеет отношения к этой теме. В MainVoiceUtil это идет:

public MainVoiceUtil(Context context, LayoutInflater inflater, Viewgroup viewgroup)
{
   super(context);
   ...
}

MainVoiceUtil extends VoiceUtil, который содержит метод onResult, который содержит performClick. context устанавливается в конструкторе VoiceUtil. Видеть:

@Override
public void onResult(AIResponse result)
{
   View button = ((Activity) context).findViewById(buttonId);
   button.performClick();
}

Благодаря выводам журнала я знаю, что у меня есть нужная кнопка. Это означает, что я знаю, что вхожу в метод onResult. Отображаются все выходные данные журнала, просто этот щелчок не выполняется.

3
KJaeg 26 Фев 2018 в 14:44

4 ответа

Лучший ответ

Оказалось, что я вызываю не тот метод. Основным действием было переопределение метода, называемого onButtonClick. Этот решал по ID, какая кнопка была нажата. Я думал, что он все равно вызывается, как только сработает onClick, что, похоже, не так. Кажется, что это идет в другую сторону. Нажав вручную, кажется, что оба работают вместе. Но в моем случае мне пришлось пойти из button.performClick(), чтобы позвонить onButtonClick(buttonId).

Я не был знаком с этим, поэтому мое замешательство. Так что это было скорее недоразумение для конкретного проекта.

0
KJaeg 27 Фев 2018 в 11:26

Вы должны установить Click Listener для этого представления

View button = ((Activity) context).findViewById(buttonId);

    button.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            // implement your logic
        }
    });

button.performClick();
-1
Mitesh Machhoya 26 Фев 2018 в 11:54

Вместо использования Activity, попробуйте передать свою активность. Не контекст.

Button button =(Button) (youractivity).findViewById(buttonId);//YourActivity.this
button.performClick();

Это может помочь.

0
Jyoti JK 26 Фев 2018 в 12:11

view.performClick() работал отлично.
Убедитесь, что вы нашли представление и добавили clicklisterner, прежде чем вызывать эту функцию.

-1
ManmeetP 26 Фев 2018 в 12:19