0

I have a (seemingly) simple problem: I'm trying to set an onTouchListener on a child linear layout but I can't get my code to compile. I get the error "Cannot Resolve Symbol setOnTouchListener" when I try to use setOnTouchListener() on my chosen view.

How can I record touches on my LinearLayout? What am I doing wrong?

MainActivity.java

   public class MainActivity extends FragmentActivity {
    public static LinearLayout glView;
    public static OpenGL_GLSurface foo;
    public TouchController touchSurface;

    void configView(){    // used to configure an opengl view 
        foo = new OpenGL_GLSurface(this);
        setContentView(R.layout.activity_main);
        glView = (LinearLayout)findViewById(R.id.openglsurface);
        RelativeLayout.LayoutParams glParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
        glView.addView(foo, glParams);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        touchSurface = new TouchController(this);  //initialize touchable surface
    }}

TouchController.java

public class TouchController {
private Context mContext;

public TouchController(Context c) {   //constructor
    mContext = c;  
}

View.OnTouchListener touch = new View.OnTouchListener() {       //set OnTouchListener to OpenGL View
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (maskedAction) {
            //do stuff
        }
        return true;
    }
};
MainActivity.glView.setOnTouchListener(touch);   //Compilation Error here @ setOnTouchListener
}
Nicol Bolas
  • 449,505
  • 63
  • 781
  • 982
Cody
  • 1,801
  • 3
  • 28
  • 53

1 Answers1

1

The issue is in your TouchController, when you are setting the touch listener, this line:

MainActivity.glView.setOnTouchListener(touch);

That line of code is invalid java code because is just hanging around in the class. It must be inside a method like the constructor. Like this:

Edit:

public class TouchController {
    private Context mContext;

    public TouchController(Context c) {   //constructor
        mContext = c;

        View.OnTouchListener touch = new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (maskedAction) {
                    //do stuff
                }
                return true;
            }
        };

        //Register touch listener here in constructor or in another method
        CourseListActivity.glView.setOnTouchListener(touch);
    }

}

You should consider moving the assignment of your member variable "touch" inside the constructor too, just before you set the touch listener. It will be more organized.

Leo
  • 834
  • 8
  • 14
  • Thanks! Can you give sample code for moving the assignment of "touch" inside the constructor? The syntax is confusing me a little. – Cody Mar 14 '16 at 03:39