はじめてのAndroid開発
先日インターンシップに参加し、KotlinでAndroidアプリ開発をしてきた。
感想とメモが入り混じった記事ではあるが、インターンで学んだことと、これからの課題をメモとして残しておく。
スコープ関数
こいつは便利だ。まだまだ使いこなせてない感があるので、勉強して使えるようになりたい。
- apply
これはshared preferencesに書き込む部分のコード。全部にmSharedPreferences.edit().putString(...)
と書くのを省略できる。
mSharedPreferences.edit().apply { putString("name", mNameText.text.toString()).apply() putString("github", mGitText.text.toString()).apply() putString("twitter", mTwitterText.text.toString()).apply() }
- let
nullableの変数を扱う時に?
をつけることがある。しかしこれを何回も使おうとすると、全部に?
をつけなくてはならない。letを使うことで解決できた。
- その他
スコープ関数は5つある。スコープ関数
と調べるといっぱい出てくるので、使いこなせるようになりたい。
静的オブジェクト
C++やJavaでは静的な変数や関数にstatic
をつけるが、Kotlinはcompanion object
を使う。
layoutファイルのデバッグ
recycler view
が動かなくて苦戦していたら、原因はitemのレイアウトファイルのサイズ設定が間違えていた。優しいメンターさんがついてたし、調べてうまく行かなかったら質問しようね...。自分がQtで開発しているときもやっていたことだが、ロジックを何度見ても動かなかったらlayotを疑おう。attributeにbackground
があると思う。そこに色をつければ、もっと早く原因の切り分けができたかもしれない。テキスト表示が崩れた時とかも有効かも。
QMLで日本語文字をboldにしたい
できなかった。 fontの種類自体をいじって太字になってるものを指定するしかないかも。
C++のstaticメンバ変数
Javaと同じノリで書いたら動かなかった。
#include <iostream> using namespace std; class MyClass { public: MyClass() {} static void set(int a) { mem = a; } static int get() { return mem; } private: static int mem; }; int MyClass::mem; int main() { MyClass::set(3); cout << MyClass::get() << endl; return 0; }
気をつけるのは初期化。関数やクラスの外で初期化が必要。
QMLとQtの連携
header file
#include <QObject> #include <QQuickItem> class Database : public QQuickItem { Q_OBJECT public: Database(); Q_INVOKABLE void lend(); signals: public slots: };
QQuickItemのincludeと継承、QMLで呼び出すメソッドはQ_INVOKABLEをつける。
main file
*** qmlRegisterType<Database>("Database", 1, 0, "Database"); ***
こいつはload前に実行する。引数の意味は調べてくれ。
qml file
Database {id: database} onClicked: { database.lend() }
good luck