Adapter

在android中有一組比較特別的組件,他們的使用有三部分來實現,M(數據模型),V(視圖),C(控制)。以最典型的ListView爲例,listView是用來顯示數據的V(view),爲ListView提供數據的數組或集合作爲M(Model),而Adapter相當於C(Control)。由Adapter控制數據在控件上的顯示。 今天,說說Adapter,當然,以ListView作爲依託。

一、常用Adapter

1、Arrayadapter

2、SimpleAdapter

3、SimpleCursorAdapter

4、自定義Adapter

二、Adapter的使用方法

1、ArrayAdapter。

以程序說明在佈局文件中,拖入一個Listview,之後在程序中實現數據加載

public class MainActivity extends Activity {
//定義Listview
private ListView lv;
//定義ArrayAdapter
private ArrayAdapter<String> adapter;
//定義要加載的數據
private String[] items={"oooo","uuuuu","mmmmm","vvvv"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //findViewById方法從佈局文件中得到ListView實例化Lv
        lv=(ListView) findViewById(R.id.lv1);
        //實例化adapter,通過系統會提供的方式
        adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,items);
        //爲Listview綁定Adapter
        lv.setAdapter(adapter);
    }
                                                                                                          
}

程序執行效果:

2、SimpleAdapter。實例演示:

public class MainActivity extends Activity {
    private ListView lv;
    //定義一個adapter對象
    private SimpleAdapter adapter;
    //定義SimpleAdapter加載的數據
    private List<Map<String, Object>> list;
    private int[] imgid = { R.drawable.x1, R.drawable.x2, R.drawable.x3,
            R.drawable.x4, R.drawable.x5};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv=(ListView) findViewById(R.id.listView1);
        list=new ArrayList<Map<String,Object>>();
        Map<String,Object> map;
        //實例化list
        for(int i=0;i<imgid.length;i++){
            map=new HashMap<String, Object>();
            map.put("data", "ooo"+i);
            map.put("p_w_picpath", imgid[i]);
            list.add(map);
        }
        //實例化adapter
        adapter=new SimpleAdapter(this, list, R.layout.items,
                new String[]{"data","p_w_picpath"}, new int[]{R.id.textView1,R.id.p_w_picpathView1});
                //綁定adapter
        lv.setAdapter(adapter);
}
}

程序執行效果:

3、SimpleCursorAdapter,這個先不講了,爲什麼呀?因爲我還不會呀,嘻嘻。以後會不上的。

4、自定義Adapter。當前面的幾種Adapter無法滿足需要時,我們會考慮使用自定義Adapter。它需要繼承BaseAdapter,然後至少要實現四個方法getCount(),getItem(),getItemId()及getView()方法。

實例演示:

自定義的Adapter:

public class MyAdapter extends BaseAdapter {
    private Context context;
    private String[] name;
    private String[] addr;
    private int[] imaids;
    public MyAdapter(Context context, String[] name, String[] addr, int[] imaids) {
        this.context = context;
        this.name = name;
        this.addr = addr;
        this.imaids = imaids;
    }
    @Override
    public int getCount() {
        return name.length;
    }
    @Override
    public Object getItem(int position) {
        return name[position];
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(R.layout.items,
                    null);
            TextView tv1 = (TextView) convertView.findViewById(R.id.name);
            TextView tv2 = (TextView) convertView.findViewById(R.id.addr);
            ImageView iv = (ImageView) convertView
                    .findViewById(R.id.p_w_picpathView1);
            iv.setBackgroundResource(imaids[position]);
            CheckBox cb = (CheckBox) convertView.findViewById(R.id.checkBox1);
            tv1.setText(name[position]);
            tv2.setText(addr[position]);
            cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView,
                        boolean isChecked) {
                    Toast.makeText(context, "dajiaho", Toast.LENGTH_LONG)
                            .show();
                }
            });
        } else {
            TextView tv1 = (TextView) convertView.findViewById(R.id.name);
            TextView tv2 = (TextView) convertView.findViewById(R.id.addr);
            CheckBox cb = (CheckBox) convertView.findViewById(R.id.checkBox1);
            ImageView iv = (ImageView) convertView
                    .findViewById(R.id.p_w_picpathView1);
            iv.setBackgroundResource(imaids[position]);
            tv1.setText(name[position]);
            tv2.setText(addr[position]);
        }
        return convertView;
    }
}


Activity代碼:使用自定義的Adapter.

public class MainActivity extends Activity {
private ListView lv;
private MyAdapter adapter;
private String[] name={
        "金賢重","胡夏","林俊杰"
};
private String[] addr={
        "韓國.首爾","中國.青島","中國.大連"
};
private int[] imaids={R.drawable.i2,R.drawable.hx,R.drawable.jj};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv=(ListView) findViewById(R.id.listView1);
        adapter=new MyAdapter(this, name, addr,imaids);
        lv.setAdapter(adapter);
        lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                                         
                                         
            }
        });
    }
                             
}

程序執行效果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章