這一章我們來學習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. */
@Override
public 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()
{
//處理子項目的單擊事件
@Override
public boolean isChildSelectable(int groupPosition,
int childPosition)
{
String str = item[groupPosition]
+ ability[groupPosition][childPosition];
updateText(str);
return true;
}
@Override
public boolean hasStableIds()
{
return true;
}
//返回父項目的視圖控制項
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent)
{
//建立一個線性布局
LinearLayout ll = new LinearLayout(ButtonDemoActivity.this);
// 設定配置樣式為Horizontal
ll.setOrientation(0);
//設定布局左邊距為50像素
ll.setPadding(50, 0, 0, 0);
//建立一個ImageView對象
ImageView imageView = new ImageView(ButtonDemoActivity.this);
//設定ImageView要顯示的對象ID
imageView.setImageResource(image[groupPosition]);
//將ImageView加到線性布局中
ll.addView(imageView);
//使用自訂文字框
TextView textView = getTextView();
//設定文字框裡顯示內容
textView.setText(getGroup(groupPosition).toString());
//將TextView加到線性布局中
ll.addView(textView);
return ll;
}
//返回父控制項的ID
@Override
public long getGroupId(int groupPosition)
{
return groupPosition;
}
//返回父控制項的總數
@Override
public int getGroupCount()
{
return ability.length;
} www.2cto.com
//取得父控制項對象
@Override
public Object getGroup(int groupPosition)
{
return item[groupPosition];
}
//取得子控制項的數量
@Override
public int getChildrenCount(int groupPosition)
{
return ability[groupPosition].length;
}
//取得子控制項的視圖
@Override
public 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
@Override
public long getChildId(int groupPosition, int childPosition)
{
return childPosition;
}
//取得子控制項的對象
@Override
public 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,好了,今天這一課結束了,謝謝
摘自:kangkangz4的專欄