类必须声明为abstract还是实现抽象方法?

时间:2016-04-24 23:16:44

标签: java android android-studio abstract-class onclicklistener

我喜欢在这里做所有事情,但我必须遗漏一些东西。希望得到解释为什么我在我的代码的第一行中出现错误以及我应该怎么做才能解决这类问题?我是android dev的新手。

public class page2 extends AppCompatActivity implements OnClickListener {


/**
 * ATTENTION: This was auto-generated to implement the App Indexing API.
 * See https://g.co/AppIndexing/AndroidStudio for more information.
 */
private GoogleApiClient client;

ImageButton rock, scissors, paper;
Random randomNum = new Random();
int cpuMov;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activitypage2); //set what xml page style to display

    rock = (ImageButton) findViewById(R.id.imageButtonRock);
    scissors = (ImageButton) findViewById(R.id.imageButtonScissors);
    paper = (ImageButton) findViewById(R.id.imageButtonPaper);

    rock.setOnClickListener(new OnClickListener() { // calling onClick() method
        @Override
        //method for handling what happens when you click Rock buttonImage.
        public void onClick(View v) {

            // number between 1-3 inclusive (max-min+1)+1
            cpuMov = randomNum.nextInt(3 - 1 + 1) + 1;
            buildAlert(cpuMov, "imageButtonRock");
            moveViewToScreenCenter(v);//float to center
        }
    });

    scissors.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

            // number between 1-3 inclusive (max-min+1)+1
            cpuMov = randomNum.nextInt(3 - 1 + 1) + 1;
            buildAlert(cpuMov, "imageButtonScissors");
            moveViewToScreenCenter(v);//float to center
        }
    });

    paper.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {

            // number between 1-3 inclusive (max-min+1)+1
            cpuMov = randomNum.nextInt(3 - 1 + 1) + 1;
            buildAlert(cpuMov, "imageButtonPaper");
            moveViewToScreenCenter(v);//float to center
        }
    });

} //EoOnCreate

private void moveViewToScreenCenter( View view )
{
    RelativeLayout root = (RelativeLayout) findViewById( R.id.rootLayout );
    DisplayMetrics dm = new DisplayMetrics();
    this.getWindowManager().getDefaultDisplay().getMetrics( dm );
    int statusBarOffset = dm.heightPixels - root.getMeasuredHeight();

    int originalPos[] = new int[2];
    view.getLocationOnScreen( originalPos );

    int xDest = dm.widthPixels/2;
    xDest -= (view.getMeasuredWidth()/2);
    int yDest = dm.heightPixels/2 - (view.getMeasuredHeight()/2) - statusBarOffset;

    TranslateAnimation anim = new TranslateAnimation( 0, xDest - originalPos[0] , 0, yDest - originalPos[1] );
    anim.setDuration(5000); // speed of the movement
    anim.setFillAfter( true );
    view.startAnimation(anim);
}

//builds the message that will be displayed
void appendMessage(AlertDialog.Builder myAlert, String cpuMove, String result) {
    myAlert.setMessage("Computer selects " +cpuMove+ ", you " +result+ "!");
    myAlert.show();
    myAlert.setCancelable(true);
    //how to give id to alertDialog to save in strings.xml

}

public void buildAlert(int move, String btnPressed) {
    AlertDialog.Builder myAlert = new AlertDialog.Builder(this);
    String cpuMove;
    String result;
    if (btnPressed.equals("imageButtonRock")) {
        //Toast.makeText(this, "hooray "+move, Toast.LENGTH_SHORT).show();
        if (move == 1) {
            cpuMove = "Rock";
            result = "tied";
            //call appendMessage to append vars and display the message
            appendMessage(myAlert, cpuMove, result);
        }
        if (move == 2) {
            cpuMove = "Scissors";
            result = "won";
            //call appendMessage to append vars and display the message
            appendMessage(myAlert,cpuMove,result);
        }
        if (move == 3) {
            cpuMove = "Paper";
            result = "lost";
            //call appendMessage to append vars and display the message
            appendMessage(myAlert,cpuMove,result);
        }
    } else if (btnPressed.equals("imageButtonScissors")) {
        if (move == 1) {
            cpuMove = "Rock";
            result = "lost";
            //call appendMessage to append vars and display the message
            appendMessage(myAlert,cpuMove,result);
        }
        if (move == 2) {
            cpuMove = "Scissors";
            result = "tied";
            //call appendMessage to append vars and display the message
            appendMessage(myAlert, cpuMove, result);
        }
        if (move == 3) {
            cpuMove = "Paper";
            result = "won";
            //call appendMessage to append vars and display the message
            appendMessage(myAlert,cpuMove,result);
        }
    } else { //imageButton is Scissors
        if (move == 1) {
            cpuMove = "Rock";
            result = "won";
            //call appendMessage to append vars and display the message
            appendMessage(myAlert,cpuMove,result);
        }
        if (move == 2) {
            cpuMove = "Scissors";
            result = "lost";
            //call appendMessage to append vars and display the message
            appendMessage(myAlert,cpuMove,result);
        }
        if (move == 3) {
            cpuMove = "Paper";
            result = "tied";
            //call appendMessage to append vars and display the message
            appendMessage(myAlert,cpuMove,result);
        }
    }
}

@Override
public void onStart() {
    super.onStart();

    // ATTENTION: This was auto-generated to implement the App Indexing API.
    // See https://g.co/AppIndexing/AndroidStudio for more information.
    client.connect();
    Action viewAction = Action.newAction(
            Action.TYPE_VIEW, // TODO: choose an action type.
            "page2 Page", // TODO: Define a title for the content shown.
            // TODO: If you have web page content that matches this app activity's content,
            // make sure this auto-generated web page URL is correct.
            // Otherwise, set the URL to null.
            Uri.parse("http://host/path"),
            // TODO: Make sure this auto-generated app deep link URI is correct.
            Uri.parse("android-app://rps.rsp/http/host/path")
    );
    AppIndex.AppIndexApi.start(client, viewAction);
}

@Override
public void onStop() {
    super.onStop();

    // ATTENTION: This was auto-generated to implement the App Indexing API.
    // See https://g.co/AppIndexing/AndroidStudio for more information.
    Action viewAction = Action.newAction(
            Action.TYPE_VIEW, // TODO: choose an action type.
            "page2 Page", // TODO: Define a title for the content shown.
            // TODO: If you have web page content that matches this app activity's content,
            // make sure this auto-generated web page URL is correct.
            // Otherwise, set the URL to null.
            Uri.parse("http://host/path"),
            // TODO: Make sure this auto-generated app deep link URI is correct.
            Uri.parse("android-app://rps.rsp/http/host/path")
    );
    AppIndex.AppIndexApi.end(client, viewAction);
    client.disconnect();
}

}

我知道View.OnClickListener必须实现onClick()函数。我不是那样做的吗?

2 个答案:

答案 0 :(得分:4)

您需要从您正在实现的接口实现所有未实现的方法。在您的情况下,接口是OnClickListener,它需要有一个方法:

public abstract void onClick (View v)

删除界面或实现该方法。如果您正在使用 Android Studio ,则可以将光标放在OnClickListener上并按ALT+ENTER轻松完成,它会为您提供有关如何修复错误。

正如我在您的代码中看到的那样,您已经为您的按钮添加了正确的onClickListeners,因此解决方案可能只是删除implements OnClickListener,因为您没有使用它。

答案 1 :(得分:2)

从班级定义中删除implements OnClickListener