Rob Paterson
Rob Paterson

Reputation: 101

Android: Call setOnTouchListener inside switch.setOnCheckedChangeListener

I'm switching between two images and I want to setOnTouchListener when only 1 of the images is displayed. Here is the code:

        Switch switch2 = (Switch) rootView.findViewById(R.id.switch2);
        final ImageView iv = (ImageView) rootView.findViewById(R.id.image2);
        switch2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    iv.setImageResource(R.drawable.sijuki2);
                } else {
                    iv.setImageResource(R.drawable.sijuki2_default);
                }
            }
        });

        if (switch2.equals(false)) {
            if (iv != null) {
                iv.setOnTouchListener(this);
            }
        }

But OnTouch is not working in the app. I tried putting iv.setOnTouchListener(this) inside onCheckedChanged but I got an error on (this).

Thanks.

Upvotes: 0

Views: 254

Answers (2)

Rob Paterson
Rob Paterson

Reputation: 101

Ok I got the functionality I wanted. Thanks Usman for your help. This is what I ended up doing.

        Switch switch2 = (Switch) rootView.findViewById(R.id.switch2);
        final ImageView iv = (ImageView) rootView.findViewById(R.id.image2);
        switch2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    iv.setImageResource(R.drawable.sijuki2);
                    iv.setOnTouchListener(null);
                } else {
                    iv.setImageResource(R.drawable.sijuki2_default);
                    iv.setOnTouchListener(SecondFragment.this);
                }
            }
        });

        if (iv != null) {
            iv.setOnTouchListener(this);
        }

Upvotes: 0

Usman Zafer
Usman Zafer

Reputation: 1361

To use OnTouchListener, you have to implement view.OnTouchListenerin your fragment like that,

public class YourFragment extends Fragment implements View.OnTouchListener{

When you implement view.OnTouchListener, Then Inside Your Fragment you have to override onTouchmethod.

Your onTouchMethod should look like this,

    @Override
public boolean onTouch(View view, MotionEvent motionEvent) {
    if(view.getId()==R.id.iv)
  //your code here
    return false;
}

Upvotes: 1

Related Questions