2012年04月26日

ListViewのクリック


前回までにリストビューの基本的な表示を行いました
ListActivityを利用したリスト表示
今回は表示したリストビューをタッチした時のイベントを検出したいと思います
リストビューの選択を検出するには
OnItemClickListenerを使用します
これは指定したitemがクリックされたときに実行されるものでこれを
作成したリストビューに適用すれば、リストビューがクリックされた時に実行されます
また十字キーなどにより選択(セレクト)された時には
setOnItemSelectedListenerを使用します
今回はクリックやセレクトされたときにLogを出力するプログラムを作成してみます
MainActivity.java
package blog.test;
 
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
 
public class MainActivity extends Activity {

    private String[] mStrings ={ "test1", "test2", "test3", "test4" };
    
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //リストビューを作成 
        ListView lv = new ListView(this);
        setContentView(lv);

        ArrayAdapter adapter = new ArrayAdapter(this,
                android.R.layout.simple_list_item_1, mStrings);
        lv.setAdapter(adapter);
 
        //クリックイベントを検出
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView parent, View view,
                    int position, long id) {
            	//listViewを指定
                ListView listView = (ListView) parent;
                //クリックされたものを取得
                String item = (String) listView.getItemAtPosition(position);
                //Log出力
                Log.v("tag", String.format("onItemClick: %s", item));
            }
        });
        
        //セレクトされたときに実行される
        lv.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            public void onItemSelected(AdapterView parent, View view,
                    int position, long id) {
            	//listViewを指定
                ListView listView = (ListView) parent;
                //クリックされたものを取得
                String item = (String) listView.getSelectedItem();
                Log.v("tag", String.format("onItemSelected: %s", item));
            }
            //何も選択さてないときに実行
            public void onNothingSelected(AdapterView parent) {
                Log.v("tag", "onNothingSelected");
            }
        });
    }
}
初期画面は以前と変わりません
device92.png
ためしにtest1をクリックしてみると・・・
device94.png
Log“onItemClick:test1”が出力されます

次に下キーでtest1をセレクトするとします
device95.png
すると・・・
device96.png
Log“onItemSelicted:test1”が出力されます

スポンサードリンク

2012年04月25日

リストビューを作成する(2)


ListActivityを利用したリスト表示
前回はArrayAdapterクラスを使用したリスト表示を行いました
リストビューを作成する
今回はListActivityクラスを使用しリストを作成してみたいと思います
ListActivityはリスト表示専用のアクティビティクラスです
新たにListViewウィジェットを作成して、アクティビティに配置する必要がありません
ListViewオブジェクトにAdapterを指定するには
setAdapterの代わりにsetListAdapterを使います
前回と同様のものをListActivityを使って書き直してみます
MainActivity.java
package blog.test;
 
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
 
public class MainActivity extends ListActivity {
    private String[] mStrings = { "test1", "test2", "test3", "test4" };
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        ArrayAdapter adapter = new ArrayAdapter(this,
        		android.R.layout.simple_list_item_1, mStrings);
        setListAdapter(adapter);

    }
}
前回よりシンプルな構成になっています


ListActivityにレイアウトファイルを指定する
ListActivityも通常のアクティビティの同様レイアウトファイルを指定する事ができます
ですがListActivityの場合はレイアウトファイルのListViewのIDに
固定のID“android:list”を指定しなければなりません

ですが逆に、リストの表示項目が無い場合に
リストのかわりにメッセージを自動的に表示させる事が可能です
その場合は固定のID“android:empty”を指定し
何もない場合の表示を設定することができます

前回作成したlist.xmlを以下のように変更します
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<ListView
    android:id="@+id/android:list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />
<TextView
    android:id="@+id/android:empty"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="リストにはなにもありません"
    />
</LinearLayout>
ID:listとID:emptyを使用しています

次にMainActivity.javaを変更します
package blog.test;
 
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
 
public class MainActivity extends ListActivity {
    private String[] mStrings = { "test1", "test2", "test3", "test4" };
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        setContentView(R.layout.list);
        
        ArrayAdapter adapter = new ArrayAdapter(this,
        android.R.layout.simple_list_item_1, mStrings);
        setListAdapter(adapter);

    }
}
これを実行すると前回同様test1〜4まで表示されます
device92.png

ためしにmStringのデータを空にしてみます
private String[] mStrings = {  };
に変更すると・・・
device93.png
表示が変化します
スポンサードリンク

2012年04月23日

リストビューを作成する


リストビュー(ListView)は複数の項目を一覧表示するためのものです
一覧表示するにはウィジェットであるListViewクラスを使う方法と
リスト表示専用のアクティビティ、ListActivityクラスを使う方法があります
リスト表示はAdapterクラスと組み合わせて使う事ができ
いろいろなAdapterクラスとの組み合わせによりさまざまな表現方法があります

基本形とArrayAdapterクラス
ArrayAdapterを使った簡単なサンプルです
表示するリストは { "test1", "test2", "test3", "test4" }としています
MainActivity.java
package blog.test;
 
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
 
public class MainActivity extends Activity {
    private String[] mStrings = { "test1", "test2", "test3", "test4" };
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        ListView lv = new ListView(this);
        setContentView(lv);
 
        ArrayAdapter adapter = new ArrayAdapter(this,
                android.R.layout.simple_list_item_1, mStrings);
        lv.setAdapter(adapter);
    }
}
最初にmStringsで表示させる文字列を指定しています
次にListViewを新規に作成し、setContentViewで表示させます
ArrayAdapterで表示する文字列とレイアウトを指定しsetAdapterでlvと結びつけています
ちなみにandroid.R.layout.simple_list_item_1はandroidにもともと用意されている定義済みのレイアウトファイルのIDです
実行結果は次のようになります
device92.png

レイアウトファイルを独自設定する
ArrayAdapterの第2引数で指定しているレイアウトファイルには
独自に作成したレイアウトファイルを指定する事ができます
res/layoutを右クリックしxmlファイルを新規作成します
list.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content">
</TextView>
次にMainActivityを以下のように変更します
package blog.test;
 
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
 
public class MainActivity extends Activity {
    private String[] mStrings = { "test1", "test2", "test3", "test4" };
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        ListView lv = new ListView(this);
        setContentView(lv);
 
        ArrayAdapter adapter = new ArrayAdapter(this,
                R.layout.list, mStrings);
        lv.setAdapter(adapter);
lv.setSelection(1);
lv.setTextFilterEnabled(true);
    }
}
これで先ほどと同様の実行結果を得られます
スポンサードリンク

×

この広告は1年以上新しい記事の投稿がないブログに表示されております。