在不同的场景下,可以根据需要继承Activity的子类。
如果应用程序界面只包括列表,则可以让应用程序继承ListActivity,
如果应用程序界面需要实现标签页效果,则可以让应用程序继承TabActivity
现在实现一个继承LauncherActivity的应用
LauncherActivity继承了ListActivity,本质是一个开发列表界面的Activity,不同的是,它开发的列表界面中的每个选项都对应一个Intent,
因此每当用户单击不同的列表项时,应用程序会自动启动对应的Activity。
使用时:需要设置Adapter,不同的是需要重写Intent intentForPosition(int position)方法,该方法根据不同列表返回不同的Intent
代码如下:
public class otherActivity extends LauncherActivity{
//定义两个activity
String[] names = {"设置程序参数","查看星级兵中"};
//定义两个activity对应实现的类
Class>[] clazzs = {preferencestest.class,ExpandableList.class};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,names);
//设置该窗口显示的列表所学的Adapter
setListAdapter(adapter);
}
//根据列表项返回指定Activity对应的Intent
@Override
public Intent intentForPosition(int position){
return new Intent(otherActivity.this,clazzs[position]);
}
}
其中:ExpandableList是ExpandableListActivity的子类,用于显示一个可展开的列表窗口
preferencestest是PreferenceActivity的子类,用于显示一个显示设置选项参数并进行保存的窗口
ExpandableList代码如下:
public class ExpandableList extends ExpandableListActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ExpandableListAdapter adapter = new BaseExpandableListAdapter(){
int[] logos = new int[]{
R.drawable.bg,
R.drawable.gc_gamehall,
R.drawable.ic_launcher
};
private String[] armTypes = new String[]{
"神族","虫族","人族"
};
private String[][] arms = new String[][]{
{"狂战士","龙骑士","电兵"},
{"小狗","刺蛇","飞龙"},
{"机枪兵","护士MM","幽灵"}
};
@Override
public Object getChild(int arg0, int arg1) {
//取得与指定组位置、指定子列表项数据
// TODO Auto-generated method stub
return arms[arg0][arg1];
}
@Override
public long getChildId(int arg0, int arg1) {
//取得给定分组中给定子视图的id.改组id必须在组中是唯一的。
// TODO Auto-generated method stub
return arg1;
}
@Override
public View getChildView(int arg0, int arg1, boolean arg2,
View arg3, ViewGroup arg4) {
//决定每个字选项的外观
// TODO Auto-generated method stub
TextView textview = getTextView();
textview.setText(getChild(arg0,arg1).toString());
return textview;
}
@Override
public int getChildrenCount(int arg0) {
//取得指定分组的子元素数
// TODO Auto-generated method stub
return arms[arg0].length;
}
private TextView getTextView(){
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,64);
TextView textview = new TextView(ExpandableList.this);
textview.setLayoutParams(lp);
textview.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
textview.setPadding(36, 0, 0, 0);
textview.setTextSize(20);
return textview;
}
@Override
public Object getGroup(int groupPosition) {
//获取指定组位置处的组数据
// TODO Auto-generated method stub
return armTypes[groupPosition];
}
@Override
public int getGroupCount() {
//取得分组数
// TODO Auto-generated method stub
return armTypes.length;
}
@Override
public long getGroupId(int groupPosition) {
//取得指定分组的id。该组的id必须在组中是唯一的
// TODO Auto-generated method stub
return groupPosition;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
//取得用于显示给定分组的视图。这个方法仅返回分组的视图对象,想获取子元素的视图对象,就必须调用该方法。
LinearLayout ll = new LinearLayout(ExpandableList.this);
ll.setOrientation(0);
ImageView logo = new ImageView(ExpandableList.this);
logo.setImageResource(logos[groupPosition]);
ll.addView(logo);
TextView textview = getTextView();
textview.setText(getGroup(groupPosition).toString());
ll.addView(textview);
return ll;
}
@Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
//是否指定分组视图及其子视图的id对应的后台数据改变也会保存该id
return true;
}
@Override
public boolean isChildSelectable(int groupPosition,
int childPosition) {
// 指定位置的子视图是否可选择
// TODO Auto-generated method stub
return true;
}
};
//设置该窗口显示列表
setListAdapter(adapter);
}
}
PreferenceActivity是专门用来设置选项参数,所使用的XML文件,就建立在res/xml目录下的,根元素是使用PreferenceScreen。
通过PreferenceActivity设置的参数,会自动保存,且立即生效,下次调用时依然有效。
XML代码:
public class preferencestest extends PreferenceActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
}