Android開(kāi)發(fā):自定義GridView/ListView數(shù)據(jù)源
在開(kāi)發(fā)中,我們常常會(huì)遇到比較復(fù)雜的GridView/ListView的布局,重新實(shí)現(xiàn)BaseAdapter不但能幫助我們實(shí)現(xiàn)我們想要的布局效果,并且在綁定大數(shù)據(jù)量時(shí)也不會(huì)感覺(jué)有卡殼現(xiàn)象。記得以前用一個(gè)ListView直接去綁定手機(jī)內(nèi)的聯(lián)系人Cursor(一百多號(hào)人),滑動(dòng)的時(shí)候就會(huì)有卡的感覺(jué)。今天決定寫(xiě)個(gè)Demo是因?yàn)樵陧?xiàng)目中可能會(huì)要實(shí)現(xiàn)這樣的一個(gè)效果:一個(gè)GridView中綁定4個(gè)ImageButton,有些按鈕在特定的情況下是不可用的,也就是Enable=false;并且不同的按鈕要擁有各自不同的點(diǎn)擊事件。



實(shí)現(xiàn)***點(diǎn)好辦,添加一個(gè)標(biāo)志位boolean bl來(lái)控制按鈕的Enable狀態(tài),實(shí)現(xiàn)第二點(diǎn)就是將View.onClickListener添加到List列表中
1、MyAdapter.java繼承自BaseAdapter
- public class MyAdapter extends BaseAdapter{
- private Context context;
- private List<Map<String,Object>> list;
- private LayoutInflater mInflater;
- public MyAdapter(Context context,List<Map<String,Object>> list){
- this.context=context;
- this.list=list;
- mInflater=LayoutInflater.from(this.context);
- }
- public int getCount() {
- // TODO Auto-generated method stub
- if(list!=null)
- return list.size();
- else
- return 0;
- }
- public Object getItem(int position) {
- // TODO Auto-generated method stub
- if(list!=null)
- return list.get(position);
- else
- return null;
- }
- public long getItemId(int position) {
- // TODO Auto-generated method stub
- return position;
- }
- @SuppressWarnings("unused")
- public View getView(int position, View convertView, ViewGroup parent) {
- // TODO Auto-generated method stub ViewHolder holder=null;
- if(holder==null){
- holder=new ViewHolder();
- convertView=mInflater.inflate(R.layout.gridview_item, null);
- holder.ib=(ImageButton)convertView.findViewById(R.id.ib);
- convertView.setTag(holder);
- }else{
- holder=(ViewHolder)convertView.getTag();
- }
- //綁定點(diǎn)擊事件
- holder.ib.setOnClickListener((OnClickListener) list.get(position).get("listen"));
- //通過(guò)標(biāo)志位控制按鈕的Enable
- if(Boolean.parseBoolean(list.get(position).get("bl").toString()))
- holder.ib.setEnabled(true);
- else
- holder.ib.setEnabled(false);
- holder.ib.setImageResource(Integer.parseInt(list.get(position).get("icon").toString()));
- return convertView;
- }
- public final class ViewHolder{
- public ImageButton ib;
- }
- }
2、綁定數(shù)據(jù)源
- public class Main extends Activity {
- /** Called when the activity is first created. */
- private GridView gvtest;
- private List<Map<String,Object>> list;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- findView();
- }
- /*
- * 定義一個(gè)標(biāo)志位bl控制按鈕的Enable,同時(shí)為了讓每個(gè)按鈕都綁定自有的點(diǎn)擊事件提前在數(shù)據(jù)源中間各自的事件實(shí)現(xiàn)
- */
- private void findView(){
- gvtest=(GridView)findViewById(R.id.gvtest);
- list=new ArrayList<Map<String,Object>>();
- Map<String,Object> map;
- map=new HashMap<String,Object>();
- map.put("bl", true);
- map.put("icon", R.drawable.menu_home_dis);
- View.OnClickListener abenClick=new View.OnClickListener() {
- public void onClick(View v) {
- // TODO Auto-generated method stub
- Toast.makeText(Main.this, "You click home menu", Toast.LENGTH_SHORT).show();
- }
- };
- map.put("listen", abenClick);
- list.add(map);
- map=new HashMap<String,Object>();
- map.put("bl", true);
- map.put("icon", R.drawable.menu_backward_dis);
- View.OnClickListener beanClick=new View.OnClickListener() {
- public void onClick(View v) {
- // TODO Auto-generated method stub
- Toast.makeText(Main.this, "You click back menu", Toast.LENGTH_SHORT).show();
- }
- };
- map.put("listen", beanClick);
- list.add(map);
- map=new HashMap<String,Object>();
- map.put("bl", false);
- map.put("icon", R.drawable.menu_forward_dis);
- View.OnClickListener weiboClick=new View.OnClickListener() {
- public void onClick(View v) {
- // TODO Auto-generated method stub
- Toast.makeText(Main.this, "You click forward menu", Toast.LENGTH_SHORT).show();
- }
- };
- map.put("listen", weiboClick);
- list.add(map);
- MyAdapter adapter=new MyAdapter(this, list);
- gvtest.setAdapter(adapter);
- }
- }
3、gridview_item.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:gravity="center">
- <ImageButton android:id="@+id/ib"
- android:layout_width="60dip"
- android:layout_height="60dip">
- </ImageButton>
- </LinearLayout>
4、Main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <GridView android:id="@+id/gvtest"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:numColumns="3"
- android:stretchMode="columnWidth"
- android:gravity="center"
- android:layout_gravity="center_horizontal">
- </GridView>
- </LinearLayout>
【編輯推薦】