Вложенный оператор switch

435
29 января 2017, 13:15

Объясните пожалуйста в чём ошибка.

Хочу использовать вложенный оператор switch, но где то явно что то упускаю, суть в том что при нажатии на одну из 4 картинок снизу, сверху должна появиться та на которую нажал, а оно не выходит, и ошибок не выдаёт.

Может ли это быть из за того что button не относиться к View?

public void onClick(View v) {
    switch(v.getId()) {
        case R.id.button:
            switch(v.getId()) {
                case R.id.imageView1:
                    mainImage.setImageResource(R.drawable.image1);
                    break;
                case R.id.imageView2:
                    mainImage.setImageResource(R.drawable.image1);
                    break;
                case R.id.imageView3:
                    mainImage.setImageResource(R.drawable.image1);
                    break;
                case R.id.imageView4:
                    mainImage.setImageResource(R.drawable.image1);
                    break;
            }
            break;
        case R.id.button2:
            switch(v.getId()) {
                case R.id.imageView1:
                    mainImage.setImageResource(R.drawable.image2);
                    break;
                case R.id.imageView2:
                    mainImage.setImageResource(R.drawable.image2);
                    break;
                case R.id.imageView3:
                    mainImage.setImageResource(R.drawable.image2);
                    break;
                case R.id.imageView4:
                    mainImage.setImageResource(R.drawable.image2);
                    break;
            }
            break;
        case R.id.button3:
            switch(v.getId()) {
                case R.id.imageView1:
                    mainImage.setImageResource(R.drawable.image3);
                    break;
                case R.id.imageView2:
                    mainImage.setImageResource(R.drawable.image3);
                    break;
                case R.id.imageView3:
                    mainImage.setImageResource(R.drawable.image3);
                    break;
                case R.id.imageView4:
                    mainImage.setImageResource(R.drawable.image3);
                    break;
            }
            break;
            }
    }
    public void photo(){
        mainImage = (ImageView) findViewById(R.id.mainImageView);
        imageView1 = (ImageView) findViewById(R.id.imageView1);
        imageView2 = (ImageView) findViewById(R.id.imageView2);
        imageView3 = (ImageView) findViewById(R.id.imageView3);
        imageView4 = (ImageView) findViewById(R.id.imageView4);
        imageView1.setOnClickListener(this);
        imageView2.setOnClickListener(this);
        imageView3.setOnClickListener(this);
        imageView4.setOnClickListener(this);
    }
}
Answer 1

При нажатии на какой-либо виджет (в Вашем случае кнопка или картинка), вызывается коллбэк onClick(View v), где View v соответствует нажатому виджету.

Насколько я понимаю, onClick(View v) у Вас срабатывает при нажатии на картинку. В таком случае v.getId() не сможет отдать Вам идентификатор R.id.button (и остальные идентификаторы, соответствующие другим кнопкам).

суть в том что при нажатии на одну из 4 картинок снизу, сверху должна появиться та на которую нажал, а оно не выходит, и ошибок не выдаёт.

Для решения этой задачи вложенный switch не нужен, достаточно всего одного switch'а:

public void onClick(View v) {
    switch(v.getId()) {
        case R.id.imageView1:
            mainImage.setImageResource(R.drawable.image1);
            break;
        case R.id.imageView2:
            mainImage.setImageResource(R.drawable.image2);
            break;
        case R.id.imageView3:
            mainImage.setImageResource(R.drawable.image3);
            break;
        case R.id.imageView4:
            mainImage.setImageResource(R.drawable.image4);
            break;
        }
    }
}

Может ли это быть из за того что button не относиться к View?

Button как раз относится к View:

class Button extends TextView {...}
class TextView extends View  {...}

поэтому Button можно скастовать к View.

READ ALSO
Часть переключателей MPC-HC не работает при создание процесса ProcessBuilder'м

Часть переключателей MPC-HC не работает при создание процесса ProcessBuilder'м

Класс в котором формируется объект ProcessBuilder:

460
ViewPager и RecyclerView получить текущий list

ViewPager и RecyclerView получить текущий list

Есть ViewPager в котором RecyclerView формируется список, используется FragmentStatePagerAdapter который сразу формирует несколько фрагментовСитуация такая,...

375
java swing jbutton

java swing jbutton

Доброй ночиРисую линию из квадратов jbutton на jpanel, когда собирается - линию убираю, jbutton - те что выше отпускаю

400
Ошибка chromedriver при driver.get(“url”);

Ошибка chromedriver при driver.get(“url”);

Запускаю программу и когда строчка до ходит driverget("url"); открывается Google с ссылкой на data:, а потом Код:

487