Please explain what the error is.

I want to use the nested switch , but somewhere I obviously miss something, the point is that when I click on one of the 4 pictures below, the one that I clicked on should appear on top, but it does not come out, and it does not produce errors.

Could this be due to the fact that the button does not belong to the View ?

enter image description here

 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); } } 

    1 answer 1

    When you click on any widget (in your case, a button or a picture), the onClick onClick(View v) is called, where View v corresponds to the pressed widget.

    As far as I understand, onClick(View v) works for you when you click on the image. In this case, v.getId() will not be able to give you the identifier R.id.button (and other identifiers corresponding to other buttons).

    The point is that when you click on one of the 4 pictures below, the one above should appear on which you clicked, but it does not come out, and does not give errors.

    To solve this problem, the nested switch not needed; all you need is one switch 'a:

     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; } } } 

    Could this be due to the fact that the button does not belong to the View ?

    Button just refers to the View :

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

    therefore, Button can be mapped to View .

    • So I did, I just need to know which button I pressed, it depends on me which 4 pictures will be there - Pasha Vasilyev
    • @ Pasha Vasilyev, You said nothing about this. Press the button - assign a certain value to a variable, then press the second switch on the image according to the value of this variable. - post_zeew
    • I apologize not correctly put it, in the end I did it like this. `public void onClick (View v) {switch (v.getId ()) {case R.id.imageView1: drawable = imageView1.getDrawable (); mainImage.setImageDrawable (drawable); break; case R.id.imageView2: drawable = imageView2.getDrawable (); mainImage.setImageDrawable (drawable); break; ` - Pasha Vasilyev