自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android開(kāi)發(fā):自定義GridView/ListView數(shù)據(jù)源

移動(dòng)開(kāi)發(fā) Android
在Android的開(kāi)發(fā)過(guò)程中,經(jīng)常會(huì)遇到比較復(fù)雜的GridView/ListView的布局,重新實(shí)現(xiàn)BaseAdapter不但能幫助我們實(shí)現(xiàn)我們想要的布局效果,并且在綁定大數(shù)據(jù)量時(shí)也不會(huì)感覺(jué)有卡殼現(xiàn)象。

在開(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

  1. public class MyAdapter extends BaseAdapter{  
  2.         private Context context;  
  3.     private List<Map<String,Object>> list;  
  4.     private LayoutInflater mInflater;  
  5.     public MyAdapter(Context context,List<Map<String,Object>> list){  
  6.         this.context=context;  
  7.         this.list=list;  
  8.         mInflater=LayoutInflater.from(this.context);  
  9.     }  
  10.     public int getCount() {  
  11.         // TODO Auto-generated method stub  
  12.         if(list!=null)  
  13.             return list.size();  
  14.         else 
  15.             return 0;  
  16.     }  
  17.     public Object getItem(int position) {  
  18.         // TODO Auto-generated method stub  
  19.         if(list!=null)  
  20.             return list.get(position);  
  21.         else 
  22.             return null;  
  23.     }  
  24.     public long getItemId(int position) {  
  25.         // TODO Auto-generated method stub  
  26.         return position;  
  27.     }  
  28.     @SuppressWarnings("unused")  
  29.     public View getView(int position, View convertView, ViewGroup parent) {  
  30.         // TODO Auto-generated method stub        ViewHolder holder=null;  
  31.         if(holder==null){  
  32.             holder=new ViewHolder();  
  33.             convertView=mInflater.inflate(R.layout.gridview_item, null);  
  34.             holder.ib=(ImageButton)convertView.findViewById(R.id.ib);  
  35.             convertView.setTag(holder);  
  36.         }else{  
  37.             holder=(ViewHolder)convertView.getTag();  
  38.         }  
  39.         //綁定點(diǎn)擊事件  
  40.         holder.ib.setOnClickListener((OnClickListener) list.get(position).get("listen"));  
  41.         //通過(guò)標(biāo)志位控制按鈕的Enable  
  42.         if(Boolean.parseBoolean(list.get(position).get("bl").toString()))  
  43.             holder.ib.setEnabled(true);  
  44.         else 
  45.             holder.ib.setEnabled(false);  
  46.         holder.ib.setImageResource(Integer.parseInt(list.get(position).get("icon").toString()));   
  47.        return convertView;  
  48.     }  
  49.     public final class ViewHolder{  
  50.         public ImageButton ib;  
  51.     }  

 

2、綁定數(shù)據(jù)源

  1. public class Main extends Activity {  
  2.     /** Called when the activity is first created. */ 
  3.     private GridView gvtest;  
  4.     private List<Map<String,Object>> list;  
  5.     @Override 
  6.     public void onCreate(Bundle savedInstanceState) {  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.main);  
  9.                 findView();  
  10.     }  
  11.         /*  
  12.      * 定義一個(gè)標(biāo)志位bl控制按鈕的Enable,同時(shí)為了讓每個(gè)按鈕都綁定自有的點(diǎn)擊事件提前在數(shù)據(jù)源中間各自的事件實(shí)現(xiàn)  
  13.      */ 
  14.     private void findView(){  
  15.         gvtest=(GridView)findViewById(R.id.gvtest);  
  16.         list=new ArrayList<Map<String,Object>>();  
  17.         Map<String,Object> map;  
  18.         map=new HashMap<String,Object>();  
  19.         map.put("bl"true);  
  20.         map.put("icon", R.drawable.menu_home_dis);  
  21.         View.OnClickListener abenClick=new View.OnClickListener() {  
  22.                         public void onClick(View v) {  
  23.                 // TODO Auto-generated method stub  
  24.                 Toast.makeText(Main.this"You click home menu", Toast.LENGTH_SHORT).show();  
  25.             }  
  26.         };  
  27.         map.put("listen", abenClick);  
  28.         list.add(map);  
  29.         map=new HashMap<String,Object>();  
  30.         map.put("bl"true);  
  31.         map.put("icon", R.drawable.menu_backward_dis);  
  32.         View.OnClickListener beanClick=new View.OnClickListener() {  
  33.                         public void onClick(View v) {  
  34.                 // TODO Auto-generated method stub  
  35.                 Toast.makeText(Main.this"You click back menu", Toast.LENGTH_SHORT).show();  
  36.             }  
  37.         };  
  38.         map.put("listen", beanClick);  
  39.         list.add(map);  
  40.         map=new HashMap<String,Object>();  
  41.         map.put("bl"false);  
  42.         map.put("icon", R.drawable.menu_forward_dis);  
  43.         View.OnClickListener weiboClick=new View.OnClickListener() {  
  44.                         public void onClick(View v) {  
  45.                 // TODO Auto-generated method stub  
  46.                 Toast.makeText(Main.this"You click forward menu", Toast.LENGTH_SHORT).show();  
  47.             }  
  48.         };  
  49.         map.put("listen", weiboClick);  
  50.         list.add(map);  
  51.                 MyAdapter adapter=new MyAdapter(this, list);  
  52.         gvtest.setAdapter(adapter);  
  53.     }  

 

3、gridview_item.xml

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout 
  3.   xmlns:android="http://schemas.android.com/apk/res/android" 
  4.   android:layout_width="wrap_content" 
  5.   android:layout_height="wrap_content" 
  6.   android:orientation="vertical" 
  7.  android:gravity="center"> 
  8.       <ImageButton android:id="@+id/ib" 
  9.          android:layout_width="60dip" 
  10.  android:layout_height="60dip"> 
  11. </ImageButton> 
  12. </LinearLayout> 

4、Main.xml

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout 
  3.    
  4. xmlns:android="http://schemas.android.com/apk/res/android" 
  5.     android:orientation="horizontal" 
  6.     android:layout_width="fill_parent" 
  7.     android:layout_height="fill_parent" 
  8.     > 
  9. <GridView android:id="@+id/gvtest" 
  10.      android:layout_width="fill_parent" 
  11.  android:layout_height="wrap_content" 
  12.     android:numColumns="3" 
  13.  android:stretchMode="columnWidth" 
  14.     android:gravity="center" 
  15.  android:layout_gravity="center_horizontal"> 
  16. </GridView> 
  17. </LinearLayout> 

【編輯推薦】

  1. Android用戶(hù)界面設(shè)計(jì):框架布局
  2. Android用戶(hù)界面設(shè)計(jì):相對(duì)布局
  3. Android用戶(hù)界面設(shè)計(jì):線(xiàn)性布局
  4. Android設(shè)計(jì)趨勢(shì)分析10則
  5. Android游戲開(kāi)發(fā):如何實(shí)現(xiàn)爆炸效果
責(zé)任編輯:佚名 來(lái)源: 博客園
相關(guān)推薦

2014-12-30 11:51:35

ListViewItem View

2016-12-26 15:25:59

Android自定義View

2013-05-02 14:08:18

2009-06-08 20:13:36

Eclipse自定義控

2016-11-16 21:55:55

源碼分析自定義view androi

2013-05-20 17:48:20

2013-04-01 14:35:10

Android開(kāi)發(fā)Android自定義x

2012-05-18 10:52:20

TitaniumAndroid模塊自定義View模塊

2013-05-20 17:33:44

Android游戲開(kāi)發(fā)自定義View

2016-04-12 10:07:55

AndroidViewList

2017-05-19 10:03:31

AndroidBaseAdapter實(shí)踐

2010-12-31 16:22:04

Analysis Se

2009-06-24 15:13:36

自定義JSF組件

2011-12-26 10:11:08

JSP

2011-08-02 11:17:13

iOS開(kāi)發(fā) View

2015-02-12 15:33:43

微信SDK

2010-12-27 09:59:11

ODBC數(shù)據(jù)源

2009-06-15 13:24:46

JBoss數(shù)據(jù)源

2013-12-26 17:08:36

Android開(kāi)發(fā)Android應(yīng)用自定義Adapter顯

2010-02-07 14:02:16

Android 界面
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)