AndroidのAdapterの詳細(二)

4670 ワード

そのアダプタモードにしても、Listviewにしてもgridviewにしても、データを埋め込むには、3つのステップに分かれています.
1つ目は、ListView、GridView、Galleryなどのデータ埋め込みオブジェクトを作成します.
listView=(ListView) findViewById(R.id.listview_simple); 

 
ステップ2:BaseAdapter、SimpleAdapter、データベースに関連付けられたCursorAdapterのいずれかであるデータ・フィラーを作成します.
たとえば、SimpleAdapterはシステムをカプセル化したり、Simpleadapterを自分で継承したりして、その方法を書き換えることができます.simpleadapterを継承する利点は、listitem内の単一のコントロールごとにリスニングイベントなどの一連の操作を設定できることです.システムパッケージを使っていればちょっと助かります.
システムパッケージを直接使用するには:
SimpleAdapter simpleAdapter = new SimpleAdapter(      
          this,     
          data,       
          R.layout.simple_item,       
          new String[] { "name", "info" },       
          new int[] { R.id.simple_name, R.id.simple_info 
       }); 


システムを書き換えるsimpleadpter:
public class ListSimpleAdpter extends SimpleAdapter{
 //         
private List> data=new ArrayList>(); 
//          
private int resource;
 private String[] from; 
private Context context;
 public ListSimpleAdpter(Context context, List> data, int resource, String[] from, int[] to) { 
super(context, data, resource, from, to); 
this.context=context; 
this.data=data; 
this.resource=resource; 
this.from=from; } 
//item    
 @Override 
public int getCount() { 
// TODO Auto-generated method stub 
return data==null?0:data.size();
 } 
//item   
@Override 
public Object getItem(int position) { 
// TODO Auto-generated method stub 
return position;
 }
//item id
 @Override 
public long getItemId(int position) { 
// TODO Auto-generated method stub 
return position; 
} 
//     item 
@Override 
public View getView(int position, View convertView, ViewGroup parent) {
 // TODO Auto-generated method stub 
Holder holder = null;
 if(convertView==null) { 
convertView=LayoutInflater.from(context).inflate(resource, null); 
holder=new Holder(); 
holder.imageView=(ImageView) convertView.findViewById(R.id.listitem_pic); 
holder.title=(TextView) convertView.findViewById(R.id.listitem_title);
 holder.content=(TextView) convertView.findViewById(R.id.listitem_content);
 convertView.setTag(holder); 
}else{ 
holder=(Holder) convertView.getTag(); 
} 
holder.imageView.setImageResource(Integer.parseInt(data.get(position).get(from[0]).toString()));
 holder.title.setText(data.get(position).get(from[1]).toString()); 
holder.content.setText(data.get(position).get(from[2]).toString()); return convertView;
 }   
class Holder{ 
ImageView imageView; 
TextView title; 
TextView content;
 } 
}

ここでAdapterの最適化には、古いView Holder、View Cacheメソッドが使用されています.
 
public View getView(int position, View convertView, ViewGroup parent) { 
// TODO Auto-generated method stub 
Holder holder = null; 
if(convertView==null) { 
convertView=LayoutInflater.from(context).inflate(resource, null); 
holder=new Holder(); 
holder.imageView=(ImageView) convertView.findViewById(R.id.listitem_pic); 
holder.title=(TextView) convertView.findViewById(R.id.listitem_title); 
holder.content=(TextView) convertView.findViewById(R.id.listitem_content); 
convertView.setTag(holder); 
}else{ 
holder=(Holder) convertView.getTag(); 
} 
holder.imageView.setImageResource(Integer.parseInt(data.get(position).get(from[0]).toString())); 
holder.title.setText(data.get(position).get(from[1]).toString()); 
holder.content.setText(data.get(position).get(from[2]).toString()); return convertView; 
}   
class Holder{ 
ImageView imageView; 
TextView title; 
TextView content; 
} 


またはHashMapを使用してキャッシュする方法:
HashMap m = new HashMap();   
public View getView(int position, View view, ViewGroup parent) {   
View convertView = m.get(position); 
if (convertView != null) {
 return convertView; 
} else {   
convertView=LayoutInflater.from(context).inflate(resource, null);   
ImageView imageView=(ImageView) convertView.findViewById(R.id.listitem_pic);   
TextView title=(TextView) convertView.findViewById(R.id.listitem_title);   
TextView content=(TextView) convertView.findViewById(R.id.listitem_content);    
m.put(position, convertView);  
 } 
}

ステップ3:オブジェクトにデータを埋め込む
listView.setAdapter(simpleAdapter); 

 
これでデータパワのデータパワが完了します.
ArrayAdapter,BaseAdapter,CursorAdapter,HeaderView ListAdapter,ListAdapter,ResourceCursorAdapter,SimpleAdapter,SimpleCursorAdapter,SpinnerAdapter,WrapperListAdapterもある.SimpleCursorTreeAdapter、二次ツリー関連SimpleExpandableListAdapter、BaseExpandableListAdapterなど.