這一章我們來學習ExpandableListView控制項,ExpandableListView就是可擴充清單控制項,還是拿西遊記來說,裡面唐僧師徙都各有各的本領,每個人的本領都不一樣,放一起顯示肯定不適合,這裡我們就用ExpandableListView控制項將他們顯示出來.
看main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="fill_parent"android:layout_height="fill_parent"><TextView android:text="西遊記各主人公能力" android:id="@+id/textView1"android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView><ExpandableListView android:layout_height="wrap_content"android:id="@+id/expandableListView" android:layout_width="match_parent"></ExpandableListView><TextView android:layout_height="wrap_content"android:layout_width="fill_parent" android:text="@string/hello"android:id="@+id/text"></TextView></LinearLayout>
還是跟前幾次一樣,定義了一個ExpandableListView控制項,下面是java原始碼:
import android.app.Activity;import android.os.Bundle;import android.view.Gravity;import android.view.View;import android.view.ViewGroup;import android.widget.AbsListView;import android.widget.BaseExpandableListAdapter;import android.widget.ExpandableListAdapter;import android.widget.ExpandableListView;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;public class ButtonDemoActivity extends Activity{private TextView text = null;private int[] image = { R.drawable.tangseng, R.drawable.wukong,R.drawable.bajie, R.drawable.shaseng };private String[] item = { "唐僧", "孫悟空 ", "豬八戒", "沙和尚" };private String[][] ability = { { "會念緊箍咒", "會說阿彌陀佛" },{ "會七十二變", "會打妖精", "會騰雲駕霧" }, { "會偷懶", "會睡覺" }, { "會挑擔子" } };private ExpandableListView explandListView;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);// 通過ID尋找到main.xml中的TextView控制項text = (TextView) findViewById(R.id.text);// 通過ID尋找到main.xml中的ExpandableListView控制項explandListView = (ExpandableListView) findViewById(R.id.expandableListView);//設定ExpandableListView適配器ExpandableListAdapter adapter = new BaseExpandableListAdapter(){//處理子項目的單擊事件@Overridepublic boolean isChildSelectable(int groupPosition,int childPosition){String str = item[groupPosition]+ ability[groupPosition][childPosition];updateText(str);return true;}@Overridepublic boolean hasStableIds(){return true;}//返回父項目的視圖控制項@Overridepublic View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent){//建立一個線性布局LinearLayout ll = new LinearLayout(ButtonDemoActivity.this);// 設定配置樣式為Horizontalll.setOrientation(0);//設定布局左邊距為50像素ll.setPadding(50, 0, 0, 0);//建立一個ImageView對象ImageView imageView = new ImageView(ButtonDemoActivity.this);//設定ImageView要顯示的對象IDimageView.setImageResource(image[groupPosition]);//將ImageView加到線性布局中ll.addView(imageView);//使用自訂文字框TextView textView = getTextView();//設定文字框裡顯示內容textView.setText(getGroup(groupPosition).toString());//將TextView加到線性布局中ll.addView(textView);return ll;}//返回父控制項的ID@Overridepublic long getGroupId(int groupPosition){return groupPosition;}//返回父控制項的總數@Overridepublic int getGroupCount(){return ability.length;}//取得父控制項對象@Overridepublic Object getGroup(int groupPosition){return item[groupPosition];}//取得子控制項的數量@Overridepublic int getChildrenCount(int groupPosition){return ability[groupPosition].length;}//取得子控制項的視圖@Overridepublic View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent){//使用自訂TextView控制項TextView textView = getTextView();//設定自訂TextView控制項的內容textView.setText(getChild(groupPosition, childPosition).toString());return textView;}//取得子控制項的ID@Overridepublic long getChildId(int groupPosition, int childPosition){return childPosition;}//取得子控制項的對象@Overridepublic Object getChild(int groupPosition, int childPosition){return ability[groupPosition][childPosition];}//自訂文字框public TextView getTextView(){AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 64);TextView textView = new TextView(ButtonDemoActivity.this);textView.setLayoutParams(lp);textView.setPadding(20, 0, 0, 0);//設定TextView控制項為向左,水平置中對齊textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);return textView;}};explandListView.setAdapter(adapter);}private void updateText(String string){// 將文本資訊設定給TextView控制項顯示出來text.setText(string);}}
其實ExpandableListView控制項使用起來還是比較方便的,只要學會了BaseExpandableListAdapter()的使用方法就可以了,當然,這裡面的布局都是在代碼部分產生的,為了擴充方便,也可以使用Layout.xml布局檔案來產生.這就留到課後,同學們自己想吧?主要是使用LayoutInflater,好了,今天這一課結束了,謝謝