Translate

BTemplates.com

Powered by Blogger.

2018年2月16日金曜日

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を接続し、データを変更すると
それに合わせてレイアウトXMLを変える機能らしい?
今まででも似たようなことがしたことがある気がするが
もっと効率的にやれるようになるのかも??
ちげぇ、これどうやら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 コメント:

コメントを投稿