AndroidカスタムアダプタAdapterベースクラスBaseAdapter

3703 ワード

[b][color=red]Adapter ViewではアダプタAdapterがよく使われていますが、anroidが提供するAdapterはいくつかのフレームワークにすぎません.必要があれば、自分で必要に応じてAdapterをカスタマイズする必要があります.
Androidが提供する[color=blue][b]3種類のAdapter[/b][/color][/color][/color]には主に[color=red]ArrayAdapter SimpleAdapter SimpleCursorAdapter[/color]がある
[b]ArrayAdapterは簡単な配列アダプタである[/b]
[color=blue][b]SimpleAdapterは、義理の子Viewレイアウトをカスタマイズすることができ、画像を持つことができる[b][color/color]
[size=medium][b]SimpleCursorAdapterは主にデータベースに用いられている[b]/[size]前の2つのデータソースは一般的にString[]またはListであり、後の1つのデータソースは一般的にデータベースクエリで得られるCursorである
カスタマイズで一番多いのは[color=red]BaseAdapter[/color]
継承[color=red][b]BaseAdapter[/b][/color],具体的には複写する方法は4つあります.
public int getCount() 
public Object getItem(int position)
public long getItemId(int position)
public View getView(int position, View convertView, ViewGroup parent)

もう一つ重要なのはその構造方法です
[color=red]MyAdapter(Context context,List>list)[/color]パラメータは固定されておらず、使用するデータに応じて自分で定義できます.
[color=blue][b]最初のパラメータは、表示するコンテキスト環境です.
[b][color=red]2番目のパラメータは、各エントリを記録するためのデータである.[/color][/b]
[color=red][b]第4の方法は主にこのエントリの全体情報を返すことであり、それは単独のレイアウトファイルであり、もちろんandroid構造によってもViewクラスの継承クラスである[/b]//color]、ここでもう一つの知識点はLayoutInflaterクラスであり、そのinflate()メソッドはレイアウトファイルに基づいてそのViewを得ることができる.
[color=red]最も重要なアイデアは、これらのエントリからそのサブView(ListViewには多くのエントリが関係し、各エントリには多くのコンポーネントがあり、ここではListViewの複数のダウンロードタスクは異なるエントリであり、各ダウンロードタスクの名前、進捗度はそのサブViewのコンポーネントである)を取得し、サブコンポーネントを取得した後、構造方法においてList>listパラメータが伝達する値に応じて、対応する値を付与したり、リソースを設定したりすることができます.具体的なコードは以下の通りです.

import java.util.List;
import java.util.Map;

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

public class MyAdapter extends BaseAdapter
{
private Context context;

private LayoutInflater layoutInflater;

private List> list;

// , list
public MyAdapter(Context context, List> list)
{
this.context = context;

layoutInflater = LayoutInflater.from(context);

this.list = list;
}

//
public int getCount()
{

return this.list!=null? this.list.size(): 0 ;
}

// ListView View
public Object getItem(int position)
{

return this.list.get(position);
}

// ListView List ID
public long getItemId(int position)
{

return position;
}

// View
public View getView(int position, View convertView, ViewGroup parent)
{
if(convertView == null)
{
convertView = layoutInflater.inflate(R.layout.item, null);
}

//
TextView tv1 = (TextView)convertView.findViewById(R.id.nameTextView);
ProgressBar pb = (ProgressBar)convertView.findViewById(R.id.sizeProgressBar);
TextView tv2 = (TextView)convertView.findViewById(R.id.sizeTextView);

// list
tv1.setText(list.get(position).get("name").toString());
pb.setProgress(Integer.parseInt(list.get(position).get("size").toString()));
tv2.setText(list.get(position).get("size").toString());

return convertView;
}
}