2018-02-15 到達点メモ
Kotlinでの話です。
端末にインストールされているアプリを一覧で取得してみる(Javaでの話)
上記のサイトを参考に実装していたのですが、
val dataList:List<AppData> = ArrayList<AppData>()
dataList.add()
で、何故かaddがメソッドで見つからないと思っていたら
Kotlinコレクション入門(Kotlin の List は読み取り専用)によると
ArrayListは読み取り専用のだそうです。
マジかよ・・・
色々調べた結果、どうもmutableListOfが使えそうな気がする
Kotlin公式ドキュメント(mutableListOf)
Kotlinの小技
実際の実装はこっちが参考になりそう。
というか調べるときにきちんとKotlinを入れないとまずい。
思ったより、Kotlin独自の仕様が多く
自動翻訳をしても漏れることが多い
Kotlin:ListViewの基本的な実装方法!
KotlinでData Bindingをする - 基本編
KotlinでData Bindingをする - ListView編
そもそもDataBindingってなんじゃらほい?
ちげぇ、これどうやらXMLでオブジェクトのデータが直接使えるようになるやつだ。
というかRailsで似たようなのがあった。
具体的にいうとプログラムのところで以下のように設定します
public class User {
public final String firstName;
public final String lastName;
public User(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
}
他にいろいろごにょごにょ設定すると
XML上で赤字のように直接モデルのメンバ変数を使えるようになる
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="handlers" type="com.example.Handlers"/>
<variable name="user" type="com.example.User"/>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}"
android:onClick="@{handlers::onClickFriend}"/>
</LinearLayout>
</layout>
ただ、正直今の俺には使い道がちょっと思いつかないなぁ……。
参考サイト:データ バインディング ライブラリ
参考サイト:Android Databinding 〜超入門〜
参考サイト:Android M の新機能!データバインディングを使ってみた
参考サイト:【Android】AndroidのData Bindingでできること(基本編)
あと、検証中に以下のようなエラーが出た。
具体的には起動してすぐ落ちた。
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nononagainfo.www.applimiter/com.nononagainfo.www.applimiter.MainActivity}: android.view.InflateException: Binary XML file line #0: Binary XML file line #0: You must supply a layout_width attribute.
幅の調整の関係でチェックボックスのlayout_widthをデザイン画面でnoneにしていため
*xml上で見た場合は、layout_width自体が無い状態になっている
上記のエラーが起きた。データを入れれば解決した。
さて、下記の画像の通り何とか作ることができたのだが
よく考えたらChromeとかプレインストールアプリなので
((appInfo.flags and ApplicationInfo.FLAG_SYSTEM) == ApplicationInfo.FLAG_SYSTEM) で弾くのはまずい。
ので、何らかの方法を考えるなり調べる必要がある。
次回は、ListViewに画像サムネイル付きテキストを表示してみるを参考に
アイコンを表示できるように取り組みたいと思う。
今日はここまで。
0 コメント:
コメントを投稿