安卓開發之ListView
阿新 • • 發佈:2019-01-09
該控制元件類似於我們iOS中的tableview,那麼它需要cell(自定義item),model(Adapter自定義),
cell例子寫法--
publicclassAnimal{privateString aName;privateString aSpeak;privateint aIcon;publicAnimal(){}publicAnimal(String aName,String aSpeak,int aIcon){this.aName = aName;this.aSpeak = aSpeak;this.aIcon = aIcon;}publicString getaName()model寫法{return aName;}publicString getaSpeak(){return aSpeak;}publicint getaIcon(){return aIcon;}publicvoid setaName(String aName){this.aName = aName;}publicvoid setaSpeak(String aSpeak){this.aSpeak = aSpeak;}publicvoid setaIcon(int aIcon){this.aIcon = aIcon;}}
publicclassAnimalAdapterextendsBaseAdapter{privateLinkedList<Animal> mData;privateContext mContext;publicAnimalAdapter(LinkedList<Animal> mData,Context mContext){this.mData = mData;this.mContext = mContext;}@Overridepublicint getCount(){return mData.size();}@OverridepublicObject getItem(int position){returnnull;}@OverridepubliclonggetItemId(int position){return position;}@OverridepublicView getView(int position,View convertView,ViewGroup parent){ convertView =LayoutInflater.from(mContext).inflate(R.layout.item_list_animal,parent,false);ImageView img_icon =(ImageView) convertView.findViewById(R.id.img_icon);TextView txt_aName =(TextView) convertView.findViewById(R.id.txt_aName);TextView txt_aSpeak =(TextView) convertView.findViewById(R.id.txt_aSpeak); img_icon.setBackgroundResource(mData.get(position).getaIcon()); txt_aName.setText(mData.get(position).getaName()); txt_aSpeak.setText(mData.get(position).getaSpeak());return convertView;}}
最後是controller--mainactivity
最後是MainActivity.java:
publicclassMainActivityextendsAppCompatActivity{privateList<Animal> mData =null;privateContext mContext;privateAnimalAdapter mAdapter =null;privateListView list_animal;@Overrideprotectedvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext =MainActivity.this; list_animal =(ListView) findViewById(R.id.list_animal); mData =newLinkedList<Animal>(); mData.add(newAnimal("狗說","你是狗麼?", R.mipmap.ic_icon_dog)); mData.add(newAnimal("牛說","你是牛麼?", R.mipmap.ic_icon_cow)); mData.add(newAnimal("鴨說","你是鴨麼?", R.mipmap.ic_icon_duck)); mData.add(newAnimal("魚說","你是魚麼?", R.mipmap.ic_icon_fish)); mData.add(newAnimal("馬說","你是馬麼?", R.mipmap.ic_icon_horse)); mAdapter =newAnimalAdapter((LinkedList<Animal>) mData, mContext); list_animal.setAdapter(mAdapter);}}
表頭表尾分割線的設定:
listview作為一個列表控制元件,他和普通的列表一樣,可以自己設定表頭與表尾: 以及分割線,可供我們設定的屬性如下:
- footerDividersEnabled:是否在footerView(表尾)前繪製一個分隔條,預設為true
- headerDividersEnabled:是否在headerView(表頭)前繪製一個分隔條,預設為true
- divider:設定分隔條,可以用顏色分割,也可以用drawable資源分割
- dividerHeight:設定分隔條的高度
翻遍了了API發現並沒有可以直接設定ListView表頭或者表尾的屬性,只能在Java中寫程式碼 進行設定了,可供我們呼叫的方法如下:
- addHeaderView(View v):新增headView(表頭),括號中的引數是一個View物件
- addFooterView(View v):新增footerView(表尾),括號中的引數是一個View物件
- addHeaderView(headView, null, false):和前面的區別:設定Header是否可以被選中
- addFooterView(View,view,false):同上
對了,使用這個addHeaderView方法必須放在listview.setAdapter前面,否則會報錯。
//新增表頭和表尾需要寫在setAdapter方法呼叫之前!!! list_animal.addHeaderView(headView); list_animal.addFooterView(footView);