私はシンプルな岩、紙、はさみアプリを作成しようとしていますが押されますが、ユーザがR、P、またはSに関連ImageButtons
を選択したときに、私は方法は、それがそれぞれのImageButtonが
"Could not find method in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatImageButton with id"
私はjavaファイルでこれらのメソッドをコメントアウトするとき、私は私が「//」を削除するので、androidstudioに思えるたらそれ
can't find the methods being called with the onClick attribute
とエラーが離れて行くと言っxml
でエラーが出ますメトを参照してくださいしかし、何らかの理由で、彼らがそこにいて呼び出されたら、それを見つけることができないでしょうか?重要なのは、これがアプリの2番目のアクティビティです(もう1つがメインです)。これは私が見たものとよく似たエラーですが、自分の状況に適した解決策を見つけることができませんでした。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.android.gamegroup.rps">
<ImageButton
android:id="@+id/rps_paper"
android:layout_width="128dp"
android:layout_height="128dp"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:background="@drawable/rps_paper"
android:onClick="userChoicePaper" />
<ImageButton
android:id="@+id/rps_scissors"
android:layout_width="128dp"
android:layout_height="128dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:background="@drawable/rps_scissors"
android:onClick="userChoiceScissors" />
<ImageButton
android:id="@+id/rps_rock"
android:layout_width="128dp"
android:layout_height="128dp"
android:background="@drawable/rps_rock"
android:onClick="userChoiceRock"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
これは私のJavaコード(rps.java)。私は問題に関連していない多くを削除しました。コメントアウトされているセクションは問題の絞り込みを試みています。
package com.example.android.gamegroup;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
import java.util.Random;
public class rps extends AppCompatActivity {
//int userChoice, pcChoice, winner, userWinCount, pcWinCount;
//ImageButton choiceRock = (ImageButton) findViewById(R.id.rps_rock);
//ImageButton choicePaper = (ImageButton) findViewById(R.id.rps_paper);
//ImageButton choiceScissors = (ImageButton)
findViewById(R.id.rps_scissors);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rps);
//userWinCount = 0;
//pcWinCount = 0;
}
// Generate a random integer ranging from 1 to 3 for
public void setPcChoice() {
int randNum;
Random randInt = new Random();
randNum = randInt.nextInt(3) + 1;
//pcChoice = randNum;
}
// Change userChoice to 1 for picking rock, assign pcChoice, assign
public void userChoiceRock(View view)
{
//choiceRock.setImageResource(R.drawable.rps_blue_rock);
//userChoice = 1;
setPcChoice();
//setWinner();
}
// Change userChoice to 2 for picking paper, assign pcChoice, assign winner
public void userChoicePaper(View view)
{
//choicePaper.setImageResource(R.drawable.rps_blue_paper);
//userChoice = 2;
setPcChoice();
//setWinner();
}
// Change userChoice to 3 for picking scissors, assign pcChoice, assign winner******************
public void userChoiceScissors(View view)
{
//choiceScissors.setImageResource(R.drawable.rps_blue_scissors);
//userChoice = 3;
setPcChoice();
//setWinner();
}
}
ボタンの 'onClick'プロパティで定義されたメソッドを使うのではなく、ボタンごとに' onClickListener'を登録して、 'onClick'メソッドでやりたいことをすることができます。 – Zelig63
onCreateメソッド内のすべてのimageButtonのfindIdを実行し、ビュー上でonClickListenerを設定します。 – Bhavnik
@ Zelig63は正しいです。 'onml'を' xml'で使用すると、ときどき他のものと競合することがあります。ですから、Javaコードで 'OnClickListener'を使う方が良いでしょう。私はあなたに役立つかもしれない下記の答えを加えました。 –