生活随笔
收集整理的這篇文章主要介紹了
Android开发:自定义GridView/ListView数据源
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
http://mobile.51cto.com/android-259861.htm
?
在開發(fā)中,我們常常會遇到比較復(fù)雜的GridView/ListView的布局,重新實現(xiàn)BaseAdapter不但能幫助我們實現(xiàn)我們想要的布局效果,并且在綁定大數(shù)據(jù)量時也不會感覺有卡殼現(xiàn)象。記得以前用一個ListView直接去綁定手機內(nèi)的聯(lián)系人Cursor(一百多號人),滑動的時候就會有卡的感覺。今天決定寫個Demo是因為在項目中可能會要實現(xiàn)這樣的一個效果:一個GridView中綁定4個ImageButton,有些按鈕在特定的情況下是不可用的,也就是Enable=false;并且不同的按鈕要擁有各自不同的點擊事件。
實現(xiàn)第一點好辦,添加一個標(biāo)志位boolean bl來控制按鈕的Enable狀態(tài),實現(xià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()?{ ??????????????????if(list!=null) ?????????????return?list.size(); ?????????else?????????????return?0; ?????} ?????public?Object?getItem(int?position)?{ ??????????????????if(list!=null) ?????????????return?list.get(position); ?????????else?????????????return?null; ?????} ?????public?long?getItemId(int?position)?{ ??????????????????return?position; ?????} ?????@SuppressWarnings("unused") ?????public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{ ??????????????????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(); ?????????} ??????????????????holder.ib.setOnClickListener((OnClickListener)?list.get(position).get("listen")); ??????????????????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?{ ??????????private?GridView?gvtest; ?????private?List<Map<String,Object>>?list; ?????@Override?????public?void?onCreate(Bundle?savedInstanceState)?{ ?????????super.onCreate(savedInstanceState); ?????????setContentView(R.layout.main); ?????????????????findView(); ?????} ????????????????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)?{ ??????????????????????????????????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)?{ ??????????????????????????????????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)?{ ??????????????????????????????????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è)計:框架布局Android用戶界面設(shè)計:相對布局Android用戶界面設(shè)計:線性布局Android設(shè)計趨勢分析10則Android游戲開發(fā):如何實現(xiàn)爆炸效果【責(zé)任編輯:小野?TEL:(010)68476606】
總結(jié)
以上是生活随笔為你收集整理的Android开发:自定义GridView/ListView数据源的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。