第四章 Android開發組件2
列表類組件
(1)ListView組件:以垂直列表的形式列出需要顯示的列表項
相關屬性:
a. android:divider 用於爲列表視圖設置分隔條,可以用顏色或者圖片資源
b. android:dividerHeight 設置分隔條的高度
c. android:entries 通過數組資源爲ListView指定列表項
d. android:footerDividersEnabled 設置是否在footerView之前繪製分隔條,默認爲true。
e. android:headerDividersEnabled 設置是否在headerView之後繪製分隔條,默認爲true。
(2)ListView使用步驟:
a. 拖入一個ListView控件,高度改爲match_parent
b. 新建一個佈局xml文件,設定每行顯示的樣式
c. 創建一個類MyAdapter繼承BaseAdapter
getView()方法:設置每行數據顯示及每行顯示樣式
getCount()方法:顯示的行數,當返回值爲0時,getView()方法不會被調用,顯示爲空白
d. 創建適配器對象
MyAdapter adapter = new MyAdapter();
e. 爲ListView設置適配器
listView.setAdapter(adapter);
f. 添加headview和footview(必須在設置適配器之前)
View headview = getLayoutInflater.inflate(R.layout.head,null);
View footview = getLayoutInflater.inflate(R.layout.foot,null);
listView.addHeadView(headview);
listView.addFootView(footview);
(3)ListView的優化
上下滑動會不斷觸發getview()方法
解決方法:複用行佈局,減少控件查找
//創建一個類,聲明幾個變量(變量類型和數量與佈局xml文件中包含的控件一致)
class ViewHolder{
View view1;
View view2;
......
}
//聲明成員變量
View inflate;
ViewHolder holder;
//優化
if(convertView==null){
//創建一個ViewHolder對象
//得到佈局轉換器對象
LayoutInflater inflater = getLayoutInflate();
//將佈局xml文件轉換爲佈局對象
inflate = inflater.inflate(R.layout.listItem,null);
//查找控件
holder.view1 = inflate.findViewById(R.id.view1);
holder.view2 = inflate.findViewById(R.id.view2);
//設置一個標籤
infalte.setTag(holder);
}else{
//替換、複用行佈局
inflate=convertView;
holder = (ViewHolder)inflate.getTag();
}
//依據控件類型設置控件內容
......
(3)數據更新
數據發生變化時,由適配器通知listview更新數據
adapter.notifyDataSetChanged();
(4)ListView的點擊事件
a. 設置點擊監聽
listview.setOnItemClickListener(new OnItemClickListener){
@Override
public void onItemClick(AdapterView<?> parent,View view,int position,long id){
......
}
}
備註:當行佈局中存在搶佔焦點的控件時(如Button),ListView的點擊會失效
解決方式:
在行佈局中搶佔焦點的控件上設置屬性:android:focusable = "false"
在行佈局中設置讓所有能搶佔焦點的控件都不搶佔焦點
android:descendantFocusability = "blocksDescendants"
b. 設置長按點擊監聽
listview.setOnItemLongClickListener(new OnItemLongClickListener){
@Override
public void OnItemLongClick(AdapterView<?> parent,View view,int position,long id){
......
}
}
Spinner組件:列表選擇框相當於網頁中的常見的下拉列表框
getSelectedItem():獲取列表選擇框的選中值
OnItemSelectedListener:設置列表項的選中事件監聽。
setDropDownViewResource():爲適配器設置列表框下拉時的選項樣式
Gallery組件:畫廊視圖,可按水平方向顯示內容,並可用手指直接拖動圖片移動,一般用來瀏覽 圖片。通常用BaseAAdapter適配器爲Grallery組件提供要顯示的圖片。
ImageSwitcher組件:圖片切換器,用於實現類似於Windows下“Windows照片查看器”中的“上一 張”、“下一張”的功能。使用ImageSwitcher必須實現 ViewSwitcher.ViewFactory接口,通過makeView()方法創建用於顯示圖片的 ImageView對象。例如:
p_w_picpathSwitcher.setInAnimation(xxx);//設置淡入動畫
p_w_picpathSwitcher.setOutAnimation(xxx);//設置淡出動畫
p_w_picpathSwitcher.setFactory(new ViewFactoty(){
@Override
public View makeView(){
ImageView p_w_picpathView = new ImageView(MainActivity.this);
return p_w_picpathView;
}
});
p_w_picpathSwitcher.setImageResource(xxx); //設置顯示的圖片