Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

Android WearのWearableListViewの最小の使い方

$
0
0

ぐぐっても、あんまりWearableListViewの使い方が出てこなくて難儀しました。NotificationsのサンプルにWearableListViewの使い方はありましたが、色々余計な処理が入ってたので、備忘録として、最小限の使い方をメモっておきます。

プロジェクトの作成とWearableListViewの追加

Android StudioでAndroid Wearのプロジェクトを作成して、activity_my.xmlをWearableListViewがあるだけの状態にします。

<?xml version="1.0" encoding="utf-8"?><android.support.wearable.view.WearableListViewxmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/list_view"android:layout_width="fill_parent"android:layout_height="fill_parent"></android.support.wearable.view.WearableListView>

Adapterの作成

WearableListViewもListViewと同様にAdapterを使って要素の管理をします。ふつうのとちょっと使い方が違って、WearableListView.Adapterを継承して作ります。今回はMyActivityの内部クラスとして実装しました。

class Adapter extends WearableListView.Adapter {
    private Context context;
    private LayoutInflater inflater;
    Adapter(Context context) {
        this.context = context;
        this.inflater = LayoutInflater.from(this.context);
    }
    @Overridepublic WearableListView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        returnnew WearableListView.ViewHolder(
                this.inflater.inflate(R.layout.list_view_item, viewGroup, false)
        );
    }
    @Overridepublicvoid onBindViewHolder(WearableListView.ViewHolder viewHolder, int i) {
        Log.d("Adapter", "index: " + i);
        TextView tv = (TextView) viewHolder.itemView.findViewById(R.id.textView);
        tv.setText("index: " + i);
    }
    @Overridepublicint getItemCount() {
        return20;
    }
}

getItemCountで要素数を返し、onCreateViewHolderで表示する要素のViewを作成します。そしてonBindViewHolderでViewとデータを結びつけます。layoutファイルから、Viewを作る場合は、上記コードのようにContextからLayoutInflaterを作っておきましょう。因みにlist_view_item.xmlは以下のようになってます。

<?xml version="1.0" encoding="utf-8"?><FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:text="New Text"android:id="@+id/textView"/></FrameLayout>

ClickListenerの実装

これ地味に必須です。これをしないと、WearableListViewの上のほうの余白タップしたらアプリが落ちてました。とりあえず、WearableListView.ClickListenerを実装したクラスを用意します。ここでは、Activityに直接実装しました。onClickが現在

publicclass MyActivity extends Activity implements WearableListView.ClickListener {

    // OnCreateの定義@Overridepublicvoid onClick(WearableListView.ViewHolder viewHolder) {
        TextView v = (TextView) viewHolder.itemView.findViewById(R.id.textView);
        Log.d("MyActivity", "onClick " + v.getText());
    }

    @Overridepublicvoid onTopEmptyRegionClick() {
        Log.d("MyActivity", "onTopEmptyRegionClick");
    }

    // Adapterの定義
}

最後に、ActivityのOnCreateでClickListnerとAdapterの設定をします。

publicclass MyActivity extends Activity implements WearableListView.ClickListener {

    @Overrideprotectedvoid onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.activity_my);
        WearableListView listView = (WearableListView) this.findViewById(R.id.list_view);
        listView.setAdapter(new Adapter(this));
        listView.setClickListener(this);
    }

     // その他の定義
}

コード全体

コード全体を載せておきます。

MyActivity.java

publicclass MyActivity extends Activity implements WearableListView.ClickListener {

    @Overrideprotectedvoid onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.activity_my);
        WearableListView listView = (WearableListView) this.findViewById(R.id.list_view);
        listView.setAdapter(new Adapter(this));
        listView.setClickListener(this);
    }



    @Overridepublicvoid onClick(WearableListView.ViewHolder viewHolder) {
        TextView v = (TextView) viewHolder.itemView.findViewById(R.id.textView);
        Log.d("MyActivity", "onClick " + v.getText());
    }

    @Overridepublicvoid onTopEmptyRegionClick() {
        Log.d("MyActivity", "onTopEmptyRegionClick");
    }

    class Adapter extends WearableListView.Adapter {

        private Context context;
        private LayoutInflater inflater;

        Adapter(Context context) {
            this.context = context;
            this.inflater = LayoutInflater.from(this.context);
        }

        @Overridepublic WearableListView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
            returnnew WearableListView.ViewHolder(
                    this.inflater.inflate(R.layout.list_view_item, viewGroup, false)
            );
        }

        @Overridepublicvoid onBindViewHolder(WearableListView.ViewHolder viewHolder, int i) {
            Log.d("Adapter", "index: " + i);
            TextView tv = (TextView) viewHolder.itemView.findViewById(R.id.textView);
            tv.setText("index: " + i);
        }

        @Overridepublicint getItemCount() {
            return20;
        }
    }
}

activity_my.xml

<?xml version="1.0" encoding="utf-8"?><android.support.wearable.view.WearableListViewxmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/list_view"android:layout_width="fill_parent"android:layout_height="fill_parent"></android.support.wearable.view.WearableListView>

list_view_item.xml

<?xml version="1.0" encoding="utf-8"?><FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:text="New Text"android:id="@+id/textView"/></FrameLayout>

Viewing all articles
Browse latest Browse all 1387

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>