質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

895閲覧

動的画面での二次元配列でのonClickListenerについて

solid14180

総合スコア13

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

1グッド

0クリップ

投稿2018/12/20 15:42

動的に二次元配列のボタンを配置し、クリックしたときにそのボタンの座標を取得の仕方が分からないです。取得して次のページにIntentで渡したいです。もとのコード削ってるのでつじつまが合わないところもあるかもしれませんが大体こんな感じです。
動的に配置されてるのでR.id.~が使えないや、二次元配列でonClickListenerの使い方がわからないです。どうぞよろしくお願い致します。

public class Main extends AppCompatActivity { private String messagea,messageb,f,g; private GridLayout layout; private Button[][] button; private int i,j,y,x,ax,ay,bx,by,cx,dx,ex,fx,gx; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); layout = new GridLayout(this); setContentView(R.layout.activity_main); Intent intent = getIntent(); messagea = "9"; messageb = "9"; ax = Integer.parseInt(messagea); ay = Integer.parseInt(messagea); bx =Integer.parseInt(messageb); by =Integer.parseInt(messageb); fx=Integer.parseInt(f); gx=Integer.parseInt(g); layout=(GridLayout) findViewById(R.id.botan); button = new Button[10][10]; for(i=0; i<ax;i++) { for(j=0;j<bx;j++){ button[i][j] = new Button(this); layout.setColumnCount(ax); layout.setRowCount(bx); button[i][j].setTag(String.valueOf(i)); button[i][j].setTag(String.valueOf(j)); GridLayout.LayoutParams[][] params = new GridLayout.LayoutParams[20][20]; params[i][j] = new GridLayout.LayoutParams(); params[i][j].width = 130; params[i][j].height = 130; params[i][j].columnSpec = GridLayout.spec(i); params[i][j].rowSpec = GridLayout.spec(j); button[i][j].setLayoutParams(params[i][j]); button[i][j].setText("a"); button[i][j].setLayoutParams(params[i][j]); layout.addView(button[i][j]); } } for(y=0; y<ay;y++) { for (x = 0; x < by; x++) { button[y][z].setOnClickListener(new View.OnClickListener() { public void onClick(View v) { String arrayi = v.getTag(i).toString(); String arrayj = v.getTag(j).toString(); Intent intent = new Intent(Main.this, Next.class); intent.putExtra(xx, arrayi); intent.putExtra(yy, arrayj); startActivity(intent); } }); } } } } コード

参考にしたサイトはこちらです
https://akira-watson.com/android/activity-2.html
https://groups.google.com/forum/#!topic/android-group-niigata/HZP--LtazVw

bochan2👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

java

1 button[i][j].setTag(String.valueOf(i)); 2 button[i][j].setTag(String.valueOf(j));

Viewにタグは一つしか付けられず、複数回呼び出すと上書きされます。
座標を登録して使いたいなら、私ならまずこうします。

java

1 button[i][j].setTag(new int[]{i, j});

で、呼び出し側でこう取り出します。(文字列で送ってるからそれにならって…)

java

1 for(y=0; y<ay;y++) { 2 for (x = 0; x < by; x++) { 3 4 button[y][z].setOnClickListener(new View.OnClickListener() { 5 public void onClick(View v) { 6 int[] array = (int[])v.getTag(); 7 Intent intent = new Intent(Main.this, Next.class); 8 intent.putExtra(xx, String.valueOf(array[0])); 9 intent.putExtra(yy, String.valueOf(array[1])); 10 startActivity(intent); 11 } 12 }); 13 14 } 15 }

ただ、今のこのリスナーの付け方だとわざわざタグをつけている意味が薄いです。
forの前で宣言しておけば、forを2回書く必要はないです。

java

1 View.OnClickListener listener = new View.OnClickListener() { 2 public void onClick(View v) { 3 int[] array = (int[])v.getTag(); 4 Intent intent = new Intent(Main.this, Next.class); 5 intent.putExtra(xx, String.valueOf(array[0])); 6 intent.putExtra(yy, String.valueOf(array[1])); 7 startActivity(intent); 8 } 9 }; 10 for(i=0; i<ax;i++) { 11 for(j=0;j<bx;j++){ 12 button[i][j] = new Button(this); 13 button[i][j].setTag(new int[]{i, j}); 14 button[i][j].setOnClickListener(listener); 15 16 // この2行は不要なのでは? 17 layout.setColumnCount(ax); 18 layout.setRowCount(bx); 19 20 GridLayout.LayoutParams[][] params = new GridLayout.LayoutParams[20][20]; 21 params[i][j] = new GridLayout.LayoutParams(); 22 params[i][j].width = 130; 23 params[i][j].height = 130; 24 params[i][j].columnSpec = GridLayout.spec(i); 25 params[i][j].rowSpec = GridLayout.spec(j); 26 button[i][j].setLayoutParams(params[i][j]); 27 button[i][j].setText("a"); 28 button[i][j].setLayoutParams(params[i][j]); 29 layout.addView(button[i][j]); 30 31 } 32 }

投稿2018/12/22 18:24

swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

solid14180

2018/12/22 18:39

ありがとうございます どこのサイトを見ても動的かつ2次元配列かつ特にonclicklistenerの座標のとり方が解決できなかったので本当にありがたいです 自分なりにやっててf,gをonclicklistener内で f=String.valueOf(y); などにして取得してもf,gの値がどこを押しても渡す値がay,byの値が入るのでそこがいまいち理解できなかったですが
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問