Android 開發自己的網絡收音機3——電台分類(ExpandableListView)


  上一篇文章說了使用SlidingMenu開源項目實現側滑欄,今天主要是講解多級列表ExpandableListView的使用,以及如何使用它實現電台分類管理。ExpandableListView是Android自帶的一個實現多級列表的控件,可以理解為ListView的二維實現。下面將針對如何在項目里面使用ExpandableListView進行講解。

(PS:新建的QQ群,有興趣可以加入一起討論:Android群:322599434)

ExpandableListView效果圖:

 

 

1、引用ExpandableListView控件

 
         
//Edited by mythou
//http://www.cnblogs.com/mythou/
   <ExpandableListView android:id="@+id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginTop="0dp" android:background="@drawable/radio_play_bg2" //配置外層列表的背景熟悉 android:divider="@drawable/list_driver"     //外層列表分割線 android:cacheColorHint="#00000000"        //這個用過listView的應該都知道,避免拖動黑屏 android:listSelector="@drawable/listview_bg"  //外層List列表項效果 android:childDivider="@drawable/list_driver"  //子列表分割線效果
        >
    </ExpandableListView>

  上面是我們平常在XML里面配置的屬性,這個跟我們一般使用ListView很類似,只是它多了一個子列表項的配置,后面我們會使用代碼配置其他一些屬性。ExpandableListView用法跟我們普通ListView類似,只是分開了父類ListView和子類ListView。ExpandableListView還有其他的一些屬性,有需要可以查看android官網文檔。

 

2、繼承BaseExpandableListAdapter

 
         
//Edited by mythou
//http://www.cnblogs.com/mythou/
public class ChannelListAdapter extends BaseExpandableListAdapter { //設置context
 Context mContext; //.............
}

 

繼承BaseExpandableListAdapter,編寫提供數據的適配器

 

 

3、數據適配器

  我們使用ListView的時候也知道,ListView需要提供一個數據適配器提供數據,ExpandableListView也同樣需要一個適配器,我們需要重載BaseExpandableListAdapter基類,編寫我們的適配器。其中最主要的是getGroupView()和getChildView()方法,這兩個方法分別返回父類列表和子類列表的列表項視圖。

 

 
         
//Edited by mythou
//http://www.cnblogs.com/mythou/
   @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {  //生成一個LinearLayout的布局,這里是外層列表的一個列表項視圖
        LinearLayout ll = new LinearLayout(mContext);
     //設置LinearLayout方向 ll.setOrientation(
0);
     //設置列表前面的Logo ImageView logo
= new ImageView(mContext);
     //這里提供一個圖片文件作為Logo logo.setImageResource(logos[groupPosition]);
     //設置邊距 logo.setPadding(
80, 0, 0, 0);
     //ImageView添加到LinearLayout里面 ll.addView(logo);
     //列表項標題 TextView textView
= getTextView(); textView.setTextColor(Color.WHITE);
     //獲取標題資源 textView.setText(getGroup(groupPosition).toString()); ll.addView(textView);
return ll; }

 

  上面返回的View就是我們外層列表的一個列表項,主要包含一個ImageView和TextView控件,使用LinearLayout布局。當然,你也可以使用一個XML文件來布局然后通過Inflate生成一個View返回。兩種方法都可以,還有一點需要補充的是,提供的圖標資源和Text的文字,這里你可以固定在程序,也可以使用數組提供。我后面因為是關聯了電台的數據,所以使用了XML來保存電台數據,然后通過解析XML返回一個ArraryList來提供數據,這個后面我講電台數據的時候,會仔細講解。

 
         
//Edited by mythou
//http://www.cnblogs.com/mythou/
  @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { //創建布局使用的LinearLayout
        LinearLayout ll = new LinearLayout(mContext);
     //設置布局方向 ll.setOrientation(
0);
     //Logo圖片 ImageView generallogo
= new ImageView(mContext); generallogo .setImageResource(generallogos[groupPosition][childPosition]); ll.addView(generallogo);
     //標題資源 TextView textView
= getTextView(); textView.setText(getChild(groupPosition, childPosition) .toString()); ll.addView(textView);
     //返回LinearLayout作為子視圖
return ll; }

  上面是二級列表的列表項的視圖構造,跟外層列表的構造幾乎一樣,這里同樣構造了一個LinearLayout的布局視圖。你也可以編寫一個XML的布局,然后加載獲取一個View視圖返回。同樣,這里提供數據的方法,我后面也是改用了XML獲取數據,這里先不多說。

  除了上面兩個獲取視圖的方法,剩下幾個獲取選項的列表數目的方法同樣也需要重寫,為列表提供數據。

 
         
//Edited by mythou
//http://www.cnblogs.com/mythou/
   @Override public Object getGroup(int groupPosition) { //返回外層列表的對象
        return generalsTypes[groupPosition]; } @Override public long getGroupId(int groupPosition) { //外層列表當前位置
        return groupPosition; } @Override public int getChildrenCount(int groupPosition) { //子列表選項數目
        return generals[groupPosition].length; } @Override public Object getChild(int groupPosition, int childPosition) { //獲取子視圖對象
        return generals[groupPosition][childPosition]; } @Override public long getChildId(int groupPosition, int childPosition) { //子列表當前的位置
        return childPosition; }

   這些方法都需要重寫,提供我們列表正確的數據,這個跟一般的ListView的Adapter基本類似,只是多了一個父類列表。我們可以根據實際情況重寫其他方法。不過上面提到的方法,基本都要重寫。才能提供正常的數據給列表使用。

 

 4、總結

  今天主要是講解一下電台列表的分類,這里主要是借助二級列表實現,第一層列表主要是代表電台分類,第二層列表就是具體每一個分類里面的電台數據。這樣分級管理,邏輯上比較清新,而且用戶也比較方便查找自己喜歡的電台。下一篇文章會講解如何通過XML讀取數據然后跟我們的電台列表綁定在一起。

 

系列文章:

Android 開發自己的網絡收音機1——功能要求及設計方案

Android 開發自己的網絡收音機2——電台列表(SlidingMenu側滑欄)

 

Edited by mythou

原創博文,轉載請標明出處:http://www.cnblogs.com/mythou/p/3207626.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM