• After 15+ years, we've made a big change: Android Forums is now Early Bird Club. Learn more here.

How to change images on 6 imageview correctly

DavidD1

Newbie
Hi, im with this task, i have 6 images and the user can click for change it, my actual code is:

Code:
final ImageView mypic = findViewById(R.id.mypic1);
mypic.setTag(1);
mypic.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        if(mypic.getTag().equals(1)){
            mypic.setImageResource(R.drawable.pic1);
            mypic.setTag(2);
        }else{
            mypic.setImageResource(R.drawable.pic2);
            mypic.setTag(1);
        }

    }        });


how i can implement this to the 6 images? i have mypic1 to mypic6
I can create an array or how :thinking:


thanks !
 
Last edited by a moderator:
Start by setting the same OnClickListener object for all ImageViews.
The parameter 'v' to the onClick(View v) method tells you which ImageView has been clicked. You can then call v.getTag() to get the correct tag.
 
can you give me an example? i try and i ask in stackoverflow but the solutions doesn't help
 
Last edited:
Post a link to your SO question so we can see what's already been suggested.
 
All the answers have supplied code which implements exactly what I suggested above. Use the same OnClickListener attached to each ImagView, and use the onClick() method parameter to get the tag.


Code:
override fun onStart() {
   //get all the image view like this
   ImageView mypic1 = (ImageView) findViewById(R.id.your_imageView_id1)
   ImageView mypic2 = (ImageView) findViewById(R.id.your_imageView_id2)
   ImageView mypic3 = (ImageView) findViewById(R.id.your_imageView_id3)
   ImageView mypic4 = (ImageView) findViewById(R.id.your_imageView_id4)

   .
   .
   .
   .


   //Set onCLickListener like this
   View.OnClickListener listener= new OnClickListener() {
       public void onClick(View imageView) {
           if(imageView instanceof ImageView ){
           //add all business logic related to your tag and replacing the image of the view
             if(imageView.getTag().equals(1)){
               imageView.setImageResource(R.drawable.picprevius);
               imageView.setTag(2);
             }else{
               imageView.setImageResource(R.drawable.newpic);
               imageView.setTag(1);
             }
          }
       }     
    }
    //add listener to all the image View like this
    mypic1.setOnClickListener(listener)
    mypic2.setOnClickListener(listener)
    mypic3.setOnClickListener(listener)
    mypic4.setOnClickListener(listener)
    .
    .
    .
    .

  }
 
yes but these code also fail with Could not find method onClick(View) in a parent or ancestor Context for android:onClick
 
If you're getting an exception, please show the stack trace from the Logcat view, and all relevant code.
 
E/AndroidRuntime: FATAL EXCEPTION: main
Process: asd.testapp, PID: 6822
java.lang.IllegalStateException: Could not find method onClick(View) in a parent or ancestor Context for android:eek:nClick attribute defined on view class android.support.v7.widget.AppCompatImageView with id 'select1'
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:424)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:381)
at android.view.View.performClick(View.java:4785)
at android.view.View$PerformClick.run(View.java:19884)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)

and the complete code in paste
https://pastebin.com/6Fz6d4w1
 
update, i change to this:

Code:
public void change(View v){
        ImageView mypic1 = (ImageView) findViewById(R.id.selectcarta1);
        ImageView mypic2 = (ImageView) findViewById(R.id.selectcarta2);
        ImageView mypic3 = (ImageView) findViewById(R.id.selectcarta3);
        ImageView mypic4 = (ImageView) findViewById(R.id.selectcarta4);
        ImageView mypic5 = (ImageView) findViewById(R.id.selectcarta5);
        ImageView mypic6 = (ImageView) findViewById(R.id.selectcarta6);
        ImageView.OnClickListener listener = new OnClickListener() {
            public void onClick(View imageView) {
                if (imageView instanceof ImageView) {
                    if (imageView.getTag().equals(1)) {
                        ((ImageView) imageView).setImageResource(R.drawable.oldpic);
                        imageView.setTag(2);
                    } else {
                        ((ImageView) imageView).setImageResource(R.drawable.newpic);
                        imageView.setTag(1);
                    }
                }
            }
        };
        mypic1.setOnClickListener(listener);
        mypic2.setOnClickListener(listener);
        mypic3.setOnClickListener(listener);
        mypic4.setOnClickListener(listener);
        mypic6.setOnClickListener(listener);
        mypic6.setOnClickListener(listener);
    }
}

and now the error is

Code:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.Object.equals(java.lang.Object)' on a null object reference
        at tiradadecartas.tarotgratis.SelectGitanaActivity$2.onClick(SelectGitanaActivity.java:41)
        at android.view.View.performClick(View.java:4785)
        at android.view.View$PerformClick.run(View.java:19884)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5343)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
 
Last edited by a moderator:
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.Object.equals(java.lang.Object)' on a null object reference
at tiradadecartas.tarotgratis.SelectGitanaActivity$2.onClick(SelectGitanaActivity.java:41)

Question - do you know what a NullPointerException is?
 
i fix that but im fighting with this, no error but when i tap on the image don't change to the other

actual code:
public void onClick(View imageView) {
Context context = getApplicationContext();
CharSequence text = "Hello toast!";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
switch (imageView.getId()){
case selectpic:
imageView = findViewById(R.id.mypic1);
imageView.setTag(1);
if (imageView.getTag().equals(1)) {
((ImageView) imageView).setImageResource(R.drawable.old);
imageView.setTag(2);
} else {
((ImageView) imageView).setImageResource(R.drawable.new);
imageView.setTag(1);
}
toast.show();
break;
case R.id.selectpic2:
toast.show();
}
}
}

this code show me the toast but don't change the image :( if you have 5 minutes please read this
i already see one tutorial on youtube explaining 3 methods of using onclick and this works but in part
 
Last edited:
Back
Top Bottom