Как передать более одного аргумента?

Я работаю над Android Studio 3.1.3.
Мое приложение состоит из восьми кнопок. Я пытаюсь передать более одной кнопки в качестве аргументов метода onClick

public void onClick(View v) {

    switch (v.getId()){

        case R.id.button:
            pauseAudio(audioTwo, audioThree, audioFour, audioFive, audioSix, audioSeven, audioEight);
            mediaPlayer = MediaPlayer.create(this,R.raw.birds);
            mediaPlayer.start();
            break;

to pauseAudio метод,

public void pauseAudio(View view, Button audioOne, Button audioTwo, Button audioThree, Button audioFour, Button audioFive, Button audioSix, Button audioSeven, Button audioEight){

        if (audioOne.isEnabled()
                || audioTwo.isEnabled()
                || audioThree.isEnabled()
                || audioFour.isEnabled()
                || audioFive.isEnabled()
                || audioSix.isEnabled()
                || audioSeven.isEnabled()
                || audioEight.isEnabled()){
            if (mediaPlayer.isPlaying() && mediaPlayer!=null){
                mediaPlayer.stop();
            }
        }

    }

это ошибка, которая появляется, когда я наводю курсор на подчеркнутый текст Как передать более одного аргумента?
Я предполагаю, что то, как я передаю аргумент, не является правильным, поэтому, пожалуйста, помогите мне. Заранее спасибо.

Лучше бы выложить сюда котик журнала приложений с вылетом. Теоретически вы все делаете правильно: вам нужно настроить OnClickListener (this) для каждой имеющейся у вас кнопки. И внедрите OnClickListener в свою активность (фрагмент), тогда, когда вы это сделали, вам понадобится условие переключения и проверьте view.id

Konstantin Volkov 02.10.2018 13:18

Опубликуйте трассировку стека сбоя.

m0skit0 02.10.2018 13:21

в логах ничего нет. Пусто.

Lone Wolf 02.10.2018 13:33

@LoneWolf Какое у вас устройство? Похоже, вы используете Huawei

Antonio Vlasic 02.10.2018 13:38

@LoneWolf Кроме того, вы даже не передаете audioSeven и audioEight. Прежде всего, удалите ссылку «this» перед вызовами методов представления.

Antonio Vlasic 02.10.2018 13:42

@AntonioVlasic, какой в ​​этом смысл? Хотя я запускаю его на эмуляторе Android.

Lone Wolf 02.10.2018 13:44

@AntonioVlasic, когда я добавляю audioSeven и audioEight, программа даже не компилируется.

Lone Wolf 02.10.2018 13:45

@LoneWolf Я думал, что вы используете Huawei, так как вы не видите журнал сбоев. Проверьте мой ответ, может поможет. Обратите внимание, что я переместил вперед «mediaPlayer! = Null», возможно, он не инициализирован.

Antonio Vlasic 02.10.2018 13:48
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
8
127
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

  if (mediaPlayer.isPlaying () && mediaPlayer! = null) {
            mediaPlayer.stop ();
        }

. вы можете сначала проверить, работает ли mediaPlayer! = null перед mediaPlayer.isPlaying () следующим образом:

   if (mediaPlayer! = null && mediaPlayer.isPlaying ()) {
            mediaPlayer.stop ();
        }

Нет, работает отлично. Приложение начало вылетать после того, как я передал более одной кнопки в качестве аргументов. Также мой логарифм пуст, там ничего нет. IDK как: /

Lone Wolf 02.10.2018 13:37
Ответ принят как подходящий

Чтобы сделать ваш код проще и, надеюсь, работать, попробуйте следующее:

public void pauseAudio(View... views) {
    for(View view : views) {
        if (view.isEnabled()) {
            if (mediaPlayer!=null && mediaPlayer.isPlaying()){
                mediaPlayer.stop();
            }
            break;
        }
    }
}

Теперь вы можете назвать это так:

pauseAudio(audioOne, audioTwo, audioThree, ...);

Обновлено:

Возможно, также проверьте, не инициализировано ли представление:

if (view != null && view.isEnabled())

Обновлено еще раз:

Рад слышать, что это сработало :) Вот объяснение получше:

public void pauseAudio(View... views) { //Allow a dynamic initialization of an array of Views
    for(View view : views) { //Loop through the array
        if (view != null && view.isEnabled()) { //If the current view is not null and enabled
            if (mediaPlayer!=null && mediaPlayer.isPlaying()){ //If the MediaPlayer is not null and playing
                mediaPlayer.stop(); //Stop the MediaPlayer
            }
            break; //Break the loop, as we have reached our usecase
        }
    }
}

Это сработало, спасибо. Не могли бы вы объяснить, что вы там делали?

Lone Wolf 02.10.2018 14:01

Отлично! Я снова обновил свой ответ, чтобы вы могли понять код. Если вам снова понадобится помощь, вы можете связаться со мной в Twitter: @Antitized

Antonio Vlasic 02.10.2018 14:07

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