2021年1月31日日曜日

[Android] [Java] Fragmentにクラスを渡したい

今日の一言

こんにちは、針山散策を今日もほのぼのと行います。
今日は、Android StudioにおいてFragmentにクラスを渡したい事がありましたのでメモします。
以下を参考にさせていただきました。

Fragmentにクラスを渡す方法

これにより、メインアクティビティで使用していたインスタンス(クラス実体化したもの)を
遷移先のフラグメントでも扱うことができます。
クラスの扱いは、先頭のアドレスポインタを渡すことで
あたかも丸ごと渡しているように見せかけるだけなので、
このシリアライズ化は理解できました。

bundle.putSerializable("紐づき名", インスタンス);

とすることで、インスタンスの先頭番地を渡して、 あたかもクラス全体を渡しているように見せかけているのですね。
public class CLASS implements Serializable
{

}
FragmentManager fragmentManager= getSupportFragmentManager();
Fragment_xx fragment_xx= new Fragment_xx();
FragmentTransaction fragmentTransaction= fragmentManager.beginTransaction();
Bundle bundle= new Bundle( );
bundle.putSerializable( "CLASS_TEST", CLASS );
bundle.putInt( "SIDE", 1234 );
fragment_xx.setArguments( bundle );
fragmentTransaction.replace( R.id.fragment_Q, fragment_xx, null);
fragmentTransaction.addToBackStack( null );
fragmentTransaction.commit();

[今日のひとこと]

Javaプログラミング能力検定試験2級の過去問題集を購入してみました。
独立志向で頑張ろう。

2021年1月28日木曜日

[Java] public final class Test{}クラスとした時の挙動

[Java] public final class Test{}クラスとした時の挙動

	今日の一言

こんにちは、針山散策を今日もほのぼのと行います。
今日は、クラスにfinalを付けた時の動作についてメモしておこうと思います。
public final class クラス名{メンバの定義}
という書式です。
これによって、継承は禁止になります。
継承というのは親のクラスをベースに差分を子クラスに入れ込むことで
コード効率を上げて行くという考え方だと理解しています。(子は親の一種である。という関係)
finalをつける意味は以下だと思います。

finalを付ける理解

不具合が入りやすいクラスにつける

不具合が入り込みやすいからfinalを付けてそのクラスを保証させたいのでしょうか。
例えば、オーバーライドされると不具合発生する可能性が高くなってしまう。

影響度が高すぎるクラスにつける

影響度が高い為、プロテクト的な役割としてfinalを付ける認識です。
例えばStringクラスは継承出来ません。

String定義

public final class String extends Object{}… なので、汎用的に使えて、継承は不可で、Objectのクラスを継承しています。
インタフェースとして、
直列化(Serializable),文字列比較(Comparable),文字列読み取り手続き(CharSequence)
が定義されているようです。
下手気に継承できてしまうと、不具合が入り込みそうですよね。シビアだな~

[今日のひとこと]

finalとfinallyは名前としては似ているのですが、全く異なるのですね。
同様にオーバーライドとオーバーロードも間違えないようにしよう。

2021年1月14日木曜日

[Android] implementにすることで分かること。

 

	今日の一言

こんにちは、針山散策を今日もほのぼのと行います。
今日は、implementをメモしておこうと思います。
class クラスA implements インタフェースB
という書式で"インタフェースB"を実装した"クラスA"を定義する。という意味になります。
クラスAとインタフェースBの関係は点線矢印で表します。

クラスA

- - >

インタフェースB


比較としては直線矢印で記される親と子のクラスの関係です。

子クラス

親クラス


私なりのインタフェースの理解としては以下です。

インタフェースは関数仕様書のようなもの

メソッドをインタフェース内に明示しておくことで並行開発することが可能になると思います。
 複数人で開発する際、インタフェースを定義しておくことで、メソッド呼び出し側の開発と メソッド内部開発を同時に進めることが出来ると思います。
(C言語でいうところのプロトタイプ宣言のようなものでしょうか。)

インタフェースはすべて抽象メソッド

メソッド入り口だけ作って中身のない定義にすることで、 開発開始時に認識合わせが楽になるのだろうと思います。
開発初期は、がっちり仕様を決めるのはほぼ不可能だし時間の無駄になるので 良い仕様です。

インタフェース内にフィールド変数は書かない

クラス自体は基本的にprivateなので、インタフェースにはそもそも書きません。
というスタイルなのだと思います。
フィールドにアクセスしたい場合、getter()メソッド、setter()メソッドを作成しましょう。

インタフェイスのフィールドは全て定数

(例: public static final int dummy= 10;と定義できます。
ここで、public static finalは省略されるので、
int dummy= 10;と書くことになります。
見た目はただのフィールドみたいですが実は定数です。)

class クラス名 implements インタフェース名でサブクラスを生成

そのサブクラス内にinterface内のメソッドを定義

(interfaceに定義しているメソッドに対して実装するので、overrideすることになります。)

多重継承はOK

ということは、クラスA は独自のメソッドをoverride出来るということになります。
class クラスA implements インタフェースB,インタフェースC,インタフェースD
の書き方はOK

[今日のひとこと]

[今日のひとこと] 公文書写ペン習字ですが、平均、1日に2枚ずつで 1年6カ月で7級Bになりました。(10級から始まります。)

2021年1月8日金曜日

[Android] フォルダ生成できない件

明けましておめでとうございます。

針山散策を今日もほのぼのと行います。


今日は、AndroidStudioでデバッグ中にフォルダ生成出来ない問題ではまりましたので

メモします。


DirPath = Environment.getExternalStorageDirectory().getPath() + "/debugfolder"

だと、アクセス禁止の領域のようです。

DirPath= context.getExternalFilesDir("").getPath()+"/debugfolder";

にする必要があります。


参考にしたサイト:

https://www.hiroom2.com/2016/03/02/android%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E6%93%8D%E4%BD%9C%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/


作成したソースは以下(内容一部変えています)

-----------------------------------------

   FileSelection( Context context)

   {

       File folder;

       String DirPath;

       DirPath= context.getExternalFilesDir("").getPath()+"/debugfolder";

       folder = new File(DirPath);

       if (!folder.exists()) {

           try{

               if (!folder.mkdirs())

                   Toast.makeText( context, DirPath + " isn't created", Toast.LENGTH_LONG ).show();

           }

           catch (Exception e)

           {

               Toast.makeText( context, DirPath + " isn't created", Toast.LENGTH_LONG ).show();

           }

       }

   }


-----------------------------------------


[今日のひとこと]

1/7に緊急事態宣言が発動しました。

近所の商店街や居酒屋ではマスクをしていないお爺さん達が井戸端会議しているし

くるときが来たな。というのが感想です。

政府は、何故緊急事態宣言を出さなかったのか?

とよくマスコミさんがいってますが、答えは1つですね。

経済をストップさせたくない。(税収を増やしたい)

少子高齢化対策で高齢者を減らしたい。(支出を減らしたい)

政治家たちも強制的にご高齢者は人生クビにしたいという

ことが見えてきます。

世知辛い世の中です。