日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android开发:自定义GridView/ListView数据源

發(fā)布時(shí)間:2024/4/15 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android开发:自定义GridView/ListView数据源 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://mobile.51cto.com/android-259861.htm

?

在開發(fā)中,我們常常會(huì)遇到比較復(fù)雜的GridView/ListView的布局,重新實(shí)現(xiàn)BaseAdapter不但能幫助我們實(shí)現(xiàn)我們想要的布局效果,并且在綁定大數(shù)據(jù)量時(shí)也不會(huì)感覺有卡殼現(xiàn)象。記得以前用一個(gè)ListView直接去綁定手機(jī)內(nèi)的聯(lián)系人Cursor(一百多號(hào)人),滑動(dòng)的時(shí)候就會(huì)有卡的感覺。今天決定寫個(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來控制按鈕的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")); ?
  • ????????//通過標(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>?
  • 【編輯推薦】

  • Android用戶界面設(shè)計(jì):框架布局
  • Android用戶界面設(shè)計(jì):相對(duì)布局
  • Android用戶界面設(shè)計(jì):線性布局
  • Android設(shè)計(jì)趨勢(shì)分析10則
  • Android游戲開發(fā):如何實(shí)現(xiàn)爆炸效果
  • 【責(zé)任編輯:小野?TEL:(010)68476606】

    總結(jié)

    以上是生活随笔為你收集整理的Android开发:自定义GridView/ListView数据源的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。