Android開発のお勉強

メニュー

E-Mail



ListViewのカスタマイズ

 ListViewの行を自分の作成したレイアウトで表示します。
 通常のListViewは、TextViewが一つ配置されていますが、
 TextViewを2つ配置させます。
 
● レイアウト
 ListViewの行に表示されるレイアウトです。
 TextViewを2つ配置します。
 IDを表示するTextViewと氏名を表示するTextViewです。
 


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/idText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView" />
    <TextView
        android:id="@+id/nameText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView" />
</LinearLayout>




 
● データを保持するクラス
 データを保持するクラスを用意します。


public class MyItem {
    private String id;
    private String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}



● ArrayAdapter
ArrayAdapterのgetViewメソッドをOverrideしたクラスを作成します。
getViewは、ListViewを表示する時に呼ばれます。
inflaterを利用して、レイアウトファイルからビューを生成します。


import java.util.ArrayList;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;


public class MyAdapter extends ArrayAdapter {

    private ArrayList items;
    private LayoutInflater inflater;

    public MyAdapter(Context context, int textViewResourceId, ArrayList items) {
        super(context, textViewResourceId, items);
        this.items = items;
        this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View view = convertView;
        if (view == null) {
            // viewがnullなら、作成したレイアウトでviewを生成
            view = inflater.inflate(R.layout.list_row, null);
        }

        // 表示データの設定
        MyItem item = (MyItem)items.get(position);
        if (item != null) {
            TextView idText = (TextView)view.findViewById(R.id.idText);
            idText.setText(item.getId());

            TextView nameText = (TextView)view.findViewById(R.id.nameText);
            nameText.setText(item.getName());
        }
        return view;
    }
}





● Activity
レイアウトにListViewを配置して、
作成したAdapterクラスを生成し、セットするだけです。


import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ListView;

public class ListActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_list);

        ArrayList list = new ArrayList();

        MyItem item1 = new MyItem();
        item1.setId("AA012");
        item1.setName("鈴木");
        list.add(item1);

        MyItem item2 = new MyItem();
        item2.setId("BB111");
        item2.setName("佐藤");
        list.add(item2);

        MyAdapter adapter = new MyAdapter(this, R.layout.list_row, list);

        ListView listView = (ListView)findViewById(R.id.listView1);
        listView.setAdapter(adapter);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_list, menu);
        return true;
    }
}






Copyright (C) Androidアプリ開発のお勉強. All Rights Reserved.