2011年1月13日木曜日

[android]Adapterって何?

Androidでは
ListViewやGallery等で
ArrayAdapterのようなXXXAdapterというものを使用しますが、
このAdapterとは、いったい何なんでしょうか?

AdapterというのはViewとデータの橋渡し役で、
Viewに必要なデータを渡してあげる役割があります。
例えば、
getCount()は、Viewに必要なitemの数、
getItem()は、対応するObjectを返す関数です。
getViewは、Listのアイテムのように、それぞれのitemに対応するView
を作って返します。

以下は、AKB48の総選挙の結果を7位までリスト表示するプログラムです。

HelloListActivity.java

package jp.android.hellolist;

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

public class HelloListActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        ListView view = (ListView)findViewById(R.id.list_view);
        HelloListAdapter adapter = new HelloListAdapter(this);
        view.setAdapter(adapter);
    }
}

HelloListAdapter.java

package jp.android.hellolist;

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

public class HelloListAdapter extends BaseAdapter {
    private LayoutInflater inflater;
    private AKBData data;

    public HelloListAdapter(Context context) {
        inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        data = new AKBData();
    }

    @Override
    public int getCount() {
        return data.getSize();
    }

    @Override
    public Object getItem(int position) {
        return data.getItem(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = inflater.inflate(R.layout.list, null);
            TextView tv1 = (TextView)convertView.findViewById(R.id.TextView01);
            tv1.setText(Integer.toString(position + 1));
            TextView tv2 = (TextView)convertView.findViewById(R.id.TextView02);
            tv2.setText(data.getItem(position));
        }
        return convertView;
    }

}

AKBData.java

package jp.android.hellolist;

import java.util.ArrayList;

public class AKBData {
    private ArrayList list;

    public AKBData() {
        list = new ArrayList();
        list.add("大島優子");
        list.add("前田敦子");
        list.add("篠田麻里子");
        list.add("板野友美");
        list.add("渡辺麻友");
        list.add("高橋みなみ");
        list.add("小嶋陽菜");
    }
    
    public int getSize() {
        return list.size();
    }

    public String getItem(int index) {
        return list.get(index);
    }
}

main.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/list_view"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    />
</LinearLayout>

list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
 android:id="@+id/LinearLayout01"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="horizontal"
 xmlns:android="http://schemas.android.com/apk/res/android">
 <TextView 
  android:text="@+id/TextView01"
  android:id="@+id/TextView01"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_marginRight="10dip" />
 <TextView
  android:text="@+id/TextView02"
  android:id="@+id/TextView02"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content" />
</LinearLayout>

実行結果

0 件のコメント: