エンジニア未満がエンジニア以上を目指す日々(仮)

戦力外通告の悔しさをバネに自身の技術力向上を目指した技術ブログ

壁紙変更アプリ (3)

前回に続いて壁紙変更アプリを作っていきます。
週末に少し時間がとれるだけなので亀の歩ですが、、、。

クリック処理について以下を参考に匿名クラスを使用して実装。
クリック処理(匿名クラス) - Buttonクラス - Android入門

さらに、ローカルストレージの内容を出すために以下を参考に実装。
場所はスクリーンショット保存場所を決め打ちで指定して、
取得できたリストを全て出力します。
睡眠学習 ディレクトリ内にあるファイル名を一覧表示する

取得リストを表示するためのリストビューについては以下を参考にしました。
Android リストビュー(ListView)を使う | Tech Booster

で、匿名クラス内での ArrayAdapter の第一引数 context に
何を指定すればよいかわからなくて悩み続ける。。。

色々探してたら以下のサイトにたどり着きました。
ど素人のAndroidアプリ開発入門 - Intentによる画面遷移

そうだったのかー。敗因は Java の理解不足か…勉強します。。
で、MainActivity.this を指定することでビルド完了。
ディレクトリの中身のファイルは出ました。

で、選択後の処理を実装しようとしたところ、
OnItemClick と OnItemSelected の違いがわからない。
両方選択しているから同じじゃないの?と思ったのですが、
そうか、OnItemSelected はポインティングデバイス用の対応なのね…。
ASCII.jp:Androidアプリで複数の項目を表示するリストビューを使う (2/2)|これで作れる! Androidのアプリケーション

というわけで、OnItemClick を使い、ファイル名を選択すると、
OnItemClick の各パラメータが出力されるようにしました。

作成したソースコードはこちら。

        Button button;
        button = (Button) findViewById(R.id.Button_Choose);
        //button.setOnClickListener(this);
        button.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Log.v("tag", "test1");
                listview = (ListView) findViewById(R.id.listview);
                item_list = new ArrayList<String>();

                // Hard-coded files position.
                files = new File("/storage/sdcard0/Pictures/Screenshots").listFiles();

                // Get files list
                if (files != null) {
                    for (int i = 0; i < files.length; i++) {
                        item_list.add(files[i].getName());
                    }
                }
                ArrayAdapter<String> arrayadapter = new ArrayAdapter<String>
                        (MainActivity.this, android.R.layout.simple_expandable_list_item_1, item_list);
                listview.setAdapter(arrayadapter);
                listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        String click_parent = (String) parent.getClass().getSimpleName();
                        String click_position = String.valueOf(position);
                        String click_id = String.valueOf(id);

                        Log.v("tag", String.format("onItemClick click_parent   : %s", click_parent));
                        Log.v("tag", String.format("onItemClick click_position : %s", click_position));
                        Log.v("tag", String.format("onItemClick click_id       : %s", click_id));

                        // ToDo : Implement for changing the wallpaper
                    }
                });
            }
        });

起動するとこんな感じ。
f:id:hielf:20140525113753p:plain:w300
f:id:hielf:20140525113758p:plain:w300

上記のファイルを上から順番にクリックしていくと、logcat に以下のログが出力されました。

V/tag     (14915): onItemClick click_parent   : ListView
V/tag     (14915): onItemClick click_position : 1
V/tag     (14915): onItemClick click_id       : 1
V/tag     (14915): onItemClick click_parent   : ListView
V/tag     (14915): onItemClick click_position : 2
V/tag     (14915): onItemClick click_id       : 2
V/tag     (14915): onItemClick click_parent   : ListView
V/tag     (14915): onItemClick click_position : 3
V/tag     (14915): onItemClick click_id       : 3
V/tag     (14915): onItemClick click_parent   : ListView
V/tag     (14915): onItemClick click_position : 4
V/tag     (14915): onItemClick click_id       : 4

次は取得したファイルを壁紙に設定だー。