title: Class must either be declared abstract or implement abstract method?
body: <p>It loos like i'm doing everything right here but I must be missing  something. Hoping to get explanation about why I'm getting that error in the first line of my code and what I should do to fix this type of problem? I'm new to android dev. </p>
  
  <pre><code>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();
  }
  </code></pre>
  
  <p>}</p>
  
  <p>I know that View.OnClickListener must implement the function onClick(). Am I not doing that?</p>