重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
第四章 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); //設置顯示的圖片
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。