子フラグメントで親フラグメントのタッチイベントが実行される

子フラグメント上に設置したフローティングアクションボタンをタッチしても親フラグメントのリスナーが呼び出されてしまう事象が。。。
調査した結果、子フラグメントのxmlに仕掛けが必要との事

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/fragment_hoge"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/seashell"
    android:clickable="true"
    >

上記のようにxmlに「android:clickable=”true”」を設定する事で親フラグメントのイベントを無効化する事ができるらしい。

AndroidStudio:Unable to start the daemon process.

Android Studioを起動すると何故か以下のエラーが発生

Unable to start the daemon process.
This problem might be caused by incorrect configuration of the daemon.
For example, an unrecognized jvm option is used.
。。。。。。。省略
Error occurred during initialization of VM
Could not reserve enough space for 1572864KB object heap

ヒープ用の十分なスペースが足りないってメッセージが表示されている。。。
調査した結果 gradle.properties の内容に問題があるらしい

gradle.properties を修正
修正前:org.gradle.jvmargs=-Xmx1536m
修正後:org.gradle.jvmargs=-Xmx1024m

上記修正により正常に動作する事を確認。

TypeScriptを使ってみる

JavaScriptよりTypeScriptの方が色々と便利らしいので使ってみることに
まずは環境構築から!

Node.jsをダウンロードしてインストール
今回インストールしたバージョンは12.16.1 LTS
インストーラを起動し以下の画面が表示されたら次へボタン

利用規約の条件に同意しますをチェックして次へボタン

インストール先を指定して次へ

カスタムセットアップ画面が表示されますが、そのまま次へ

必要なツールを自動的にインストールする場合は下記画面にてチェックを入れて次へ

ここまできたらインストールボタンを押下

インストールが終了するまで待つ

インストール完了の画面で終了ボタン押下

必要なツールをインストールするための画面が表示されるので、任意のキーを押下する

自動的にPowerShellが起動しツールのインストールが開始される

Visual Studio Codeがインストールされたはずなので、スタートメニューから起動しましょう。
起動したらターミナルからTypeScriptをインストールします。
以下のコマンドを入力しエンター
npm install -g typescript

次にFirebase CLIのインストール
以下のコマンドを入力してエンター
npm install -g firebase-tools

Firebase CLIのインストールが完了したらターミナルにてfirebase initを実行!
。。。おっと、何かエラーになっちゃった。。。

原因はWindowsのPowerShellスクリプト実行ポリシーによって管理者以外に許可されていないことによるものらしい。
セキュリティポリシーを変更することで解消できるとの事で以下のコマンドを実行
Set-ExecutionPolicy RemoteSigned
したが、、、またエラーが返ってきた。。。
管理者権限じゃないと実行できないらしい。。。

ので、 現在のユーザーで-Scope CurrentUser オプションを付ければ上手くいくらしいとの事で、
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
を実行!

次に、 firebase initを実行! 成功するとFIREBASEの文字が表示される

とりあえず全てのサービスを有効にする

firestoreにプロジェクトは作成済みなので、
Use an existing projectを選択。
対象のプロジェクトも選択しエンター

あとはデフォルトのまま進めていく

ここで、JavaScriptかTypeScriptのどちらを使用するか聞かれるので
TypeScriptを選択する

TSLintを使用するか聞かれるのでとりあえずyes

依存関係をインストールするか聞かれるのでyes

色々と聞かれるのでしばらくはyesで進める

とりあえずここも全て選択

ポート番号もデフォルトで進めていく

初期設定完了!

Linux シェルスクリプト備忘録(cpコマンド)

フォルダ内にあるcsvファイルを指定したフォルダへコピーするシェルスクリプト。

#!/bin/bash
filename=’/hoge/*.csv’
dirname=’/hoge2′
cp -a -f -p ${filename} ${dirname}

変数<filename>にコピーしたいファイルを指定

全てのcsvファイルを対象としたいのでファイル名は<*.csv>で指定
*はワイルドカード

変数<dirname>にコピー先となるディレクトリを指定

cpコマンドを使用してコピー実行

cpコマンド実行時に以下のオプションを指定
-a:元ファイルの属性とディレクトリの構成を保持
-f:警告なしで上書き
-p:元ファイルのオーナー、グループ、パーミション、タイムスタンプを保持

Linux シェルスクリプト備忘録(改行コード)

catコマンドで改行コードをチェック
式:cat “オプション” “ファイル名”
全ての非表示文字を表示するためoptionに-Aを指定
cat -A hoge.txt

行の末尾に^M$が表示されている場合は改行コードがCRLFとなっているため
以下のコマンドで改行コードをLFにする

trコマンドで改行コードを削除し新ファイル名で保存する
式:tr “オプション ” “文字セット” <“対象ファイル名 “> “コピー先ファイル名”
改行コードをを削除したいので-dオプションを使用して文字セットの削除を行いhoge2.txtとして保存
tr -d ‘\r’ <hoge.txt> hoge2.txt

Android FragmentからFragmentへの画面遷移

fragmentからfragmentへの画面遷移は以下のコードで実現

// インスタンス作成
SettingFragment sf = new SettingFragment();
FragmentManager fm= getActivity().getSupportFragmentManager();
// 遷移先をリプレイス
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.host_fragment, sf);
transaction.commit();

引数を渡したい場合は以下の様にすればOK

// インスタンス作成
SettingFragment sf = new SettingFragment();
FragmentManager fm= getActivity().getSupportFragmentManager();
Bundle bundle = new Bundle();

// bundleを使用して値を設定し次画面へ渡す
// “key”は任意の名称を指定してOK(次画面でデータ受取時に必要)
bundle.putString(“key”, hoge);
sf.setArguments(bundle);

// 遷移先をリプレイス
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.host_fragment, sf);
transaction.commit();


Android Activity 画面遷移

アクティビティの画面遷移はインテント(Intent)を使用する。

今回はログイン画面⇒メインメニューへの画面遷移を作成しました。

次の2画面を用意。LoginActivity、MainActivity

LoginActivityに以下のコードを追加することで画面遷移ができる

// メインアクティビティへ遷移
Intent intent = new Intent(getApplication(), MainActivity.class);
startActivity(intent);

はずでしたが、マニフェストファイルにも仕掛けが必要

マニフェストファイルに開始時のアクティビティに加え、遷移先のアクティビティを追加

AndroidManifest.xml への記載例

<activity
android:name=".LoginActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
</activity>

Android × Firebase

https://firebase.google.com にアクセスしプロジェクト作成

AndroidStudioのコンソールでCLIをインストール
npm install -g firebase-tools

CLIのインストールが完了したら以下のコマンドで起動
firebase login

Allow Firebase to collect CLI usage and error reporting information?
と尋ねられるのでYesを選択

ここまでで準備完了!
ターミナルからfirebaseが使用可能になる

firebase init のコマンドで

 ######## #### ########  ######## ########     ###     ######  ########
 ##        ##  ##     ## ##       ##     ##  ##   ##  ##       ##
 ######    ##  ########  ######   ########  #########  ######  ######
 ##        ##  ##    ##  ##       ##     ## ##     ##       ## ##
 ##       #### ##     ## ######## ########  ##     ##  ######  ########

がでてくるはず

次に静的サイトのホスティングを選択します
Hosting: Configure and deploy Firebase Hosting sites

次に作成済みのプロジェクトを選択します

以降はEnterキーで進めて問題なし
ルールのファイル名は何にするか?(database.rules.json)
サイトホスティングのディレクトリ名は?(public)
SinglePageApplicationように設定するか?(yes)

コンソール実行ディレクトリに以下のファイルが作成されている事を確認
./database.rules.json
./firebase.json
./public/index.html

サーバー起動
firebase serve

AndroidStudio3.5備忘録

プロジェクト作成時にナビゲーションドロワーアクティビティを選択した際に雛形が作成されるが、その雛形にバグがあるらしい。。。

メニューをタップしても画面遷移ができない。。。

どうやら自動生成されたactivity_main.xmlに問題があるようでした。

以下は自動生成されたソース
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <com.google.android.material.navigation.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />

    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</androidx.drawerlayout.widget.DrawerLayout>

ナビゲーションメニューのレイアウトを記述している個所はincludeの後に記述しなければならないらしい。。。

修正後のソース
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <com.google.android.material.navigation.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer" />

</androidx.drawerlayout.widget.DrawerLayout>

この変更を行う事で正常に画面遷移が行えるようになりました。。。