开发者

Problems with OnClickListener

开发者 https://www.devze.com 2023-04-07 16:39 出处:网络
Hey am new to android , i just want to handle a click event , but i got problems ...thi sis my code: 开发者_如何学JAVApackage karim.test;

Hey am new to android , i just want to handle a click event , but i got problems ...thi sis my code:

开发者_如何学JAVApackage karim.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;


public class TestActivity extends Activity implements android.view.View.OnClickListener {


    private Button b1;


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        b1 = (Button) this.findViewById(R.id.button1);
        b1.setOnClickListener(this);

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return true;
    }

    @Override
    public void onClick(View v) {



    }

and i got this error :

Description Resource    Path    Location    Type
The method onClick(View) of type TestActivity must override a superclass method TestActivity.java   /Test/src/karim/test    line 33 Java Problem

can you please tell me whats wrong ????

Please Be specific !!


My guess is that you're compiling with a Java 5 compiler (or Java 5 compiler settings in the IDE). In Java 5, @Override was only usable on a method overriding a method of a class, not an interface. It was extended to interface method overriding in Java 6.

Change the compiler version, or remove the @Override annotation on the onClick method.


You don't need to have your Activity class implement OnClickListener. Get rid of that. You just need to define the listener and assign it to your button. Take a look at the official android docs:

http://developer.android.com/guide/topics/ui/ui-events.html


public class TestActivity extends Activity{


    private Button b1;


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        b1 = (Button) this.findViewById(R.id.button1);
        b1.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

            }
        });

    }

or in your case

public class TestActivity extends Activity implements android.view.View.OnClickListener {


    private Button b1;


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        b1 = (Button) this.findViewById(R.id.button1);
        b1.setOnClickListener(this);

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return true;
    }

    @Override
    public void onClick(View v) {
    if(v==b1)
    {
       //button logic
    }

    }


As an extension to "JB Nizet" answer:

The neatest way to handle onClick-events is (in my opinion) to add the onClick-attribute to the XML-Layout definition.

<Button android:text="Click Me!"
  android:onClick="doSomething"
/>

In your java-code:

public void doSomething(View v){
  // Do stuff here
}

This way, you can define a single method for every single onClick-event. This is available since API-Level 4 which corresponds to Android 1.6


Looks like you are using compiler below java 6 for your project in eclipse. Right click on your project, go to properties-->Java compiler. Make sure you have 1.6 selected in compiler compliance field.

0

精彩评论

暂无评论...
验证码 换一张
取 消