這一章我們來學習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.aiwalls.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的專欄