【Java】TableLayoutからTableRow内の全データにアクセスする方法
javaは不慣れだったので、TableLayoutで作った以下の9×9のマスを浚おうとして詰まりました。
最初はすべてのTextViewをビューバインディングで取得してはsetTextするという最悪なことをやっていましたが、ふつうにfor文ぶん回してひたすらキャストしてgetChildAtするだけでできますよね。
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); for (int x = 0; x < 9; x++) { TableRow tableRow = ((TableRow)binding.boardLayout.getChildAt(x)); for (int y = 0; y < 9; y++) { TextView textView = (TextView) tableRow.getChildAt(y); textView.setText("何か"); } }
UIは以下のが延々と続きます。
<TableLayout android:id="@+id/boardLayout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="20dp" android:layout_marginTop="164dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" > <TableRow android:id="@+id/row1" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textView11" android:layout_width="40dp" android:layout_height="40dp" android:gravity="center" android:background="@drawable/frame" android:text="@string/blank" android:textSize="30sp" /> <TextView android:id="@+id/textView12" android:layout_width="40dp" android:layout_height="40dp" android:gravity="center" android:background="@drawable/frame" android:text="@string/blank" android:textSize="30sp" /> <TextView android:id="@+id/textView13" android:layout_width="40dp" android:layout_height="40dp" android:gravity="center" android:background="@drawable/frame" android:text="@string/blank" android:textSize="30sp" /> <TextView android:id="@+id/textView14" android:layout_width="40dp" android:layout_height="40dp" android:gravity="center" android:background="@drawable/frame" android:text="@string/blank" android:textSize="30sp" /> <TextView android:id="@+id/textView15" android:layout_width="40dp" android:layout_height="40dp" android:gravity="center" android:background="@drawable/frame" android:text="@string/blank" android:textSize="30sp" /> <TextView android:id="@+id/textView16" android:layout_width="40dp" android:layout_height="40dp" android:gravity="center" android:background="@drawable/frame" android:text="@string/blank" android:textSize="30sp" /> <TextView android:id="@+id/textView17" android:layout_width="40dp" android:layout_height="40dp" android:gravity="center" android:background="@drawable/frame" android:text="@string/blank" android:textSize="30sp" /> <TextView android:id="@+id/textView18" android:layout_width="40dp" android:layout_height="40dp" android:gravity="center" android:background="@drawable/frame" android:text="@string/blank" android:textSize="30sp" /> <TextView android:id="@+id/textView19" android:layout_width="40dp" android:layout_height="40dp" android:gravity="center" android:background="@drawable/frame" android:text="@string/blank" android:textSize="30sp" /> </TableRow> <TableRow android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/row2"> 以下略
以下がfor文を使わなかったときの暴挙
binding.textView11.setText("何か"); binding.textView12.setText("何か"); binding.textView13.setText("何か"); binding.textView14.setText("何か"); binding.textView15.setText("何か"); binding.textView16.setText("何か"); binding.textView17.setText("何か"); binding.textView18.setText("何か"); binding.textView19.setText("何か"); binding.textView21.setText("何か"); binding.textView22.setText("何か"); binding.textView23.setText("何か"); binding.textView24.setText("何か"); binding.textView25.setText("何か"); binding.textView26.setText("何か"); binding.textView27.setText("何か"); binding.textView28.setText("何か"); binding.textView29.setText("何か"); binding.textView31.setText("何か"); binding.textView32.setText("何か"); binding.textView33.setText("何か"); binding.textView34.setText("何か"); binding.textView35.setText("何か"); binding.textView36.setText("何か"); binding.textView37.setText("何か"); binding.textView38.setText("何か"); binding.textView39.setText("何か"); binding.textView41.setText("何か"); binding.textView42.setText("何か"); binding.textView43.setText("何か"); binding.textView44.setText("何か"); binding.textView45.setText("何か"); binding.textView46.setText("何か"); binding.textView47.setText("何か"); binding.textView48.setText("何か"); binding.textView49.setText("何か"); binding.textView51.setText("何か"); binding.textView52.setText("何か"); binding.textView53.setText("何か"); binding.textView54.setText("何か"); binding.textView55.setText("何か"); binding.textView56.setText("何か"); binding.textView57.setText("何か"); binding.textView58.setText("何か"); binding.textView59.setText("何か"); binding.textView61.setText("何か"); binding.textView62.setText("何か"); binding.textView63.setText("何か"); binding.textView64.setText("何か"); binding.textView65.setText("何か"); binding.textView66.setText("何か"); binding.textView67.setText("何か"); binding.textView68.setText("何か"); binding.textView69.setText("何か"); binding.textView71.setText("何か"); binding.textView72.setText("何か"); binding.textView73.setText("何か"); binding.textView74.setText("何か"); binding.textView75.setText("何か"); binding.textView76.setText("何か"); binding.textView77.setText("何か"); binding.textView78.setText("何か"); binding.textView79.setText("何か"); binding.textView81.setText("何か"); binding.textView82.setText("何か"); binding.textView83.setText("何か"); binding.textView84.setText("何か"); binding.textView85.setText("何か"); binding.textView86.setText("何か"); binding.textView87.setText("何か"); binding.textView88.setText("何か"); binding.textView89.setText("何か"); binding.textView91.setText("何か"); binding.textView92.setText("何か"); binding.textView93.setText("何か"); binding.textView94.setText("何か"); binding.textView95.setText("何か"); binding.textView96.setText("何か"); binding.textView97.setText("何か"); binding.textView98.setText("何か"); binding.textView99.setText("何か");
ファイル置き場を移動しました
ジオシティーズが死ぬらしいので、昔アカウントだけ取っといて放置していたfc2ホームページに移行しました。
・やり方
ファイル全DL→fc2に全部突っ込む→index.htmlのリンクURLを書き換え
終わり
しかしブログ記事にリンクURLを貼ってたので全部変えるハメになったのだった。
【Windows10】無線がアクセスポイントごと消えて通信が切断する問題への対処
無線が切れ、俺はデュエルに敗北した――*1
唐突に無線が切れ、アクセスポイントすらなくなって再接続できないことが度々発生している。
どうもWindows10の大型アプデ以降無線がおかしくなったような気がしてならない。
有線とタブレットはふつうにつながるので、Wifiルーターの問題ではないらしい。
無線デバイスドライバのアプデを試すも効果なし。
結局、通信が切れるたびに無線デバイスを再起動することにした。
以下手順。
無線マークをクリックするとアクセスポイント一覧が出る。
接続中のアクセスポイントのプロパティを開くと、下の方にプロパティ欄がある。
説明の欄にあるデバイス(今回はIntel(R) Dual Band Wireless-AC 7260)を確認。
Windowsマークを右クリックしてデバイスマネージャーを開く。
ネットワークアダプターをクリックして、さっき確認した無線デバイスを右クリック。
「デバイスを無効にする」を実行、再度右クリックして「デバイスを有効にする」を実行。
これで接続処理が実行されて自動的に再接続される。
タイトルにある通り、これは対処に過ぎない。
根本的な原因が分からないので、一度パソコンを初期化しようと思っている。
*1:デュエルリンクスでランクマ中に無線が切れて切断負けになった
【C言語】ポインタまとめ
ポインタとは
プログラムはメモリ上で動きます。
変数や関数は全部メモリ上の適当な位置(アドレス)に置かれます。
そのアドレスに対してアレコレ操作するのがポインタです。
もっとざっくり言うと、メモリ上のデータにアクセスする仕組みがポインタです。
文法
宣言
ポインタ変数の宣言でよくある記法は基本的に下記のどっちかですが、後述のアクセス操作を考えると前者のほうがいいです。
int* pointer1; int *pointer2;
実は変数型と変数名の間に「*」を入れればポインタ変数になります。
半角スペースを入れようが入れまいが同じです。
つまりこれもOKです。(見たことないですが)
int*pointer3; int * pointer4;
使い方
ポインタ変数にはアドレスが格納されます。
下記では変数aのアドレスをポインタ変数に入れています。
「&変数名」で変数のアドレスになります。
int a = 1; int* pointer = &a;
ポインタが指すアドレスに入っているデータ(つまりaのデータ)にアクセスするには下記のように「*」を変数名の前につけます。
int b = *pointer;
で、これが宣言時のint *pointer2;と紛らわしいので、宣言時はint* pointerのほうが誤解がないと思います。
配列
ポインタの配列と、配列へのポインタがあります。
紛らわしいです。
前者はポインタがいっぱい、後者はポインタが一個だけです。
ポインタの配列がこう。
int* p[5];//int型ポインタ変数の配列p p[0] = 0x00000001; p[1] = 0x00000002; p[2] = 0x00000003; p[3] = 0x00000004; p[4] = 0x00000005;
デバッグするとこんな感じになります。
配列へのポインタがこう。
int(*po)[5];//要素数5の配列用のポインタ変数po int arr[5] = {1,2,3,4,5}; po = &arr;
デバッグするとこんな感じになります。
構造体
通常、構造体のメンバーにアクセスする際は「.」を使います。
struct MyStruct { int i; }; struct MyStruct s; s.i = 2;
しかし構造体のポインタ変数では代わりに「->」を使います。
違うものなので仕方ないですが、紛らわしいですね。
struct MyStruct { int i; }; struct MyStruct stru; stru.i = 2; struct MyStruct* structp; structp = &stru; structp->i = 6;
応用
リスト
多分課題でよく出てくる単純なリスト構造です。
構造体の中に、(主に自身と同じ)構造体のポインタ変数を仕込みます。
下記では構造体n1の次(next変数)に構造体n2を突っ込むことで、n1とn2を続きにしています。
struct node { int data; struct node* next; }; struct node n1; n1.data = 1; struct node n2; n2.data = 2; n2.next = NULL; n1.next = &n2;
デバッグで見るとこんな感じです。
今はNULLにしていますが、n2.nextに別のを突っ込めば、リストを無限につなげられます。