2013年05月12日

【Android】超簡単!リストビューの使い方【ListView】

Androidでアイテムの一覧表示などにはListView(リストビュー)を使う。
頻繁に使うことが予想されるUIなので、しっかりマスターしておこう。

リストビューの使い方の基本は、

1. リストビューのインスタンスを生成
2. アダプタのインスタンスを生成
3. 表示したいアイテムをアダプタに追加
4. リストビューにアダプタをセット
5. リストビューにリスナ(OnItemClickListenerなど)を登録

である。

以下は、外部ストレージのルートにあるファイルやフォルダをリストビューに表示するだけの簡単なサンプルである。

まずは activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/listview1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

次に MainActivity.java
package com.example.listviewsample;

import java.io.File;

import com.example.listviewsample.R.id;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // リストビューのインスタンスを生成
        ListView listView = (ListView) findViewById(id.listview1);
        // 配列アダプタのインスタンスを生成
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1);
        // 外部ストレージのルートのファイル一覧をアイテムに追加
        String path = Environment.getExternalStorageDirectory().getPath();
        File file = new File(path);
        for (File f : file.listFiles()) {
            if (f.isDirectory()) {
                // ディレクトリなら末尾にスラッシュ
                adapter.add(f.getName() + "/");
            } else {
                adapter.add(f.getName());
            }
        }
        // リストビューにアダプタをセット
        listView.setAdapter(adapter);
        // リストビューのアイテムがクリックされた時に呼び出されるリスナーを登録
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                ListView listView = (ListView) parent;
                // クリックされたアイテムを取得
                String item = (String) listView.getItemAtPosition(position);
                // 取得したアイテムをトースト表示
                Toast.makeText(MainActivity.this, item + "がクリックされました。",
                        Toast.LENGTH_SHORT).show();
            }
        });
        // リストビューのアイテムが選択された時に呼び出されるリスナーを登録
        listView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {
                ListView listView = (ListView) parent;
                // 選択されたアイテムを取得
                String item = (String) listView.getSelectedItem();
                // 取得したアイテムをトースト表示
                Toast.makeText(MainActivity.this, item + "が選択されました。",
                        Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                // // トースト表示
                // Toast.makeText(MainActivity.this, "何も選択されていません。",
                // Toast.LENGTH_SHORT).show();
            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

リストビューのアイテムがクリック、または選択されたら、選択されたアイテム名がトースト表示されるだけの簡単なお仕事である。

■参考にさせていただいたサイト
リストビュー(ListView)を使用するには: 逆引きAndroid入門
posted by 寄り道退屈男 at 14:27 | Comment(0) | TrackBack(0) | Android
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/67196768
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック