Androidカスタムアダプタ

3701 ワード


ListViewでGridView...の中でよくアダプターAdapterを使いますが、anroidが提供するAdapterはいくつかのフレームワークにすぎません.もし私たちが需要があれば、やはり自分で必要に応じてAdapterのandroidをカスタマイズして提供する3種類のAdapterは主にArrayAdapter、SimpleAdapter、SimpleCursorAdapterがあります.SimpleAdapterは、カスタムサブViewレイアウトで、画像(ローカル画像のみ、ネットワークで画像をロードする場合は、私の前のBlogを参照してください)を持つことができます.SimpleCursorAdapterは主にデータベースに使用され、前の2つのデータソースは一般的にString[]またはListです.次のデータソースは一般的にデータベースクエリーで得られたCursorですが、私たちがカスタマイズしたものが一番多いのはSimpleAdapterから継承されているのか、具体的な使い方は前のBlogに続いています.ダウンロードの進捗バーを表示するサブViewをリストViewに表示したいのですが、SimpleAdapterは一般的な画像を表示することができます.しかし、進捗バーを表示することはできません(表示するだけでなく、リアルタイムで更新する必要があります)ので、SimpleAdapterを継承します.具体的に複写する方法は4つあります.public int getCount()public Object getItem(int position)public long getItemId(int position)public View getView(int position,View convertView,View Group parent)さらに重要なのは、その構築方法MyAdapter(Context context,List>list)です.パラメータは固定されていません.使用するデータに基づいて自分で定義することができ、第1のパラメータは表示するコンテキスト環境であり、第2のパラメータは各エントリの情報を記録するためのものである.第1の方法は主にListViewに表示するサブViewの数、すなわちダウンロードタスク数を返し、構築方法のリストのエントリを返すだけでよい.第2の方法はサブViewを返すことである.すなわち、ListViewのサブエントリです.もちろん、必要な情報をカスタマイズして返すこともできます.3番目のメソッドは、ListViewの位置に基づいてidを返すことです.最も重要な最も理解しにくいのは4番目のメソッドです.4番目のメソッドは、主にこのエントリの情報全体を返すことです.これは個別のレイアウトファイルです.もちろんandroid構造に基づいてもViewクラスの継承クラスであり、ここでもう一つの知識点はLayoutInflaterクラスであり、そのinflate()メソッドはレイアウトファイルに基づいてそのView戻り値を得ることができる.最も重要なアイデアは、これらのエントリからそのサブ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() 
     {
         // TODO Auto-generated method stub
         return this.list!=null? this.list.size(): 0 ;
     }
 
     //  ListView    View
     public Object getItem(int position)
     {
         // TODO Auto-generated method stub
         return this.list.get(position);
     }
 
     //  ListView    List  ID
     public long getItemId(int position) 
     {
         // TODO Auto-generated method stub
         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;
     }
 }