1. 程式人生 > >安卓開發之ListView

安卓開發之ListView

該控制元件類似於我們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()
{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;}}
model寫法
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;}@Overridepubliclong
getItemId(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);