博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Activity
阅读量:4542 次
发布时间:2019-06-08

本文共 6210 字,大约阅读时间需要 20 分钟。

各种Activity基类

  实例:用LauncherActivity开发启动Activity的列表

  LauncherActivity继承了ListActivity,因此它本质上也是一个开发列表界面的Activity,但它开发出来的列表界面与普通列表界面有所不同。它开发出来的列表界面中的每个列表项都对应于一个Intent,因此当用户单击不同的列表项时,应用程序会自动启动对应的Activity。

  使用LauncherActivity的方法并不难,由于依然是一个ListActivity,因此同样需要为它设置Adapter——既可使用简单的ArrayAdapter,也可以使用SimpleAdapter,当然还可以扩展BaseAdapter来实现自己的Adapter。与使用普通ListActivity不同的是,继承LauncherActivity时通常应该重写Intent intentForPosition(int position)方法,该方法根据不同列表项返回不同的Intent(用于启动不同的Activity)。

public class MainActivity extends LauncherActivity {	// 定义两个Activity的名称	String[] names = { "设置程序参数", "查看星际兵种" };	// 定义两个Activity对应的实现类	Class
[] clazzs = { PreferenceActivityTest.class, ExpandableListActivityTest.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(MainActivity.this, clazzs[position]); }}

  实例:使用ExpandableListActivity实现可展开的Activity

  ExpandableListActivity的用法与ExpandableListView的用法基本相似,只要为该Activity传入一个ExpandableListAdapter对象即可,接下来ExpandableListActivity将会生成一个显示可展开列表的窗口。

public class ExpandableListActivityTest extends ExpandableListActivity {	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		ExpandableListAdapter adapter = new BaseExpandableListAdapter() {			int[] logos = new int[] { R.drawable.p, R.drawable.z, R.drawable.t };			private String[] armTypes = new String[] { "神族兵种", "虫族兵种", "人族兵种" };			private String[][] arms = new String[][] { { "狂战士", "龙骑士", "黑暗圣堂", "电兵" }, { "小狗", "刺蛇", "飞龙", "自爆飞机" },					{ "机枪兵", "护士MM", "幽灵" } };			// 获取指定组位置、指定子列表项处的子列表项数据			@Override			public Object getChild(int groupPosition, int childPosition) {				return arms[groupPosition][childPosition];			}			@Override			public long getChildId(int groupPosition, int childPosition) {				return childPosition;			}			@Override			public int getChildrenCount(int groupPosition) {				return arms[groupPosition].length;			}			private TextView getTextView() {				AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,						ViewGroup.LayoutParams.WRAP_CONTENT);				TextView textView = new TextView(ExpandableListActivityTest.this);				textView.setLayoutParams(lp);				textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);				textView.setPadding(36, 0, 0, 0);				textView.setTextSize(20);				return textView;			}			// 该方法决定每个子选项的外观			@Override			public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,					ViewGroup parent) {				TextView textView = getTextView();				textView.setText(getChild(groupPosition, childPosition).toString());				return textView;			}			// 获取指定组位置处的组数据			@Override			public Object getGroup(int groupPosition) {				return armTypes[groupPosition];			}			@Override			public int getGroupCount() {				return armTypes.length;			}			@Override			public long getGroupId(int groupPosition) {				return groupPosition;			}			// 该方法决定每个组选项的外观			@Override			public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {				LinearLayout ll = new LinearLayout(ExpandableListActivityTest.this);				ll.setOrientation(LinearLayout.HORIZONTAL);				ImageView logo = new ImageView(ExpandableListActivityTest.this);				logo.setImageResource(logos[groupPosition]);				ll.addView(logo);				TextView textView = getTextView();				textView.setText(getGroup(groupPosition).toString());				ll.addView(textView);				return ll;			}			@Override			public boolean isChildSelectable(int groupPosition, int childPosition) {				return true;			}			@Override			public boolean hasStableIds() {				return true;			}		};		// 设置该窗口显示列表		setListAdapter(adapter);	}}

  实例:PreferenceActivity结合PreferenceFragment实现参数设置界面

  PreferenceActivity是一个非常有用的基类,当我们开发一个android应用程序时,不可避免地需要进行选项设置,这些设置会以参数的形式保存,习惯上我们会用Preference进行保存。

  需要指出的是,如果android应用程序中包含中包含的某个Activity专门用于设置选项参数,那么android为这种Activity提供了便捷的基类:PreferenceActivity。

  一旦Activity继承了PreferenceActivity,那么该Activity完全不需要自己控制Preferences的读写,PreferenceActivity会为我们处理一切。
  PreferenceActivity与普通Activity不同,它不再使用普通的界面布局文件,而是使用选项设置的布局文件。选项设置的布局文件以PreferenceActivity作为根元素——它表明定义一个参数设置的界面。
  为了创建一个PreferenceActivity,需要先创建一个对应的界面布局文件。从android3.0开始,android不再推荐直接让PreferenceActivity加载选项设置的布局文件,而是建议将PreferenceActivity与PreferenceFragment结合使用,启用PreferenceActivity只负责加载选项设置列表的布局文件,PreferenceFragment才负责加载选项设置的布局文件。

public class PreferenceActivityTest extends PreferenceActivity {	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		// 该方法用于为该界面设置一个标题按钮		if (hasHeaders()) {			Button button = new Button(this);			button.setText("设置操作");			// 将该按钮添加到该界面上			setListFooter(button);		}	}	// 重写该该方法,负责加载页面布局文件	@Override	public void onBuildHeaders(List
target) { super.onBuildHeaders(target); loadHeadersFromResource(R.xml.preference_headers, target); } // 重写该方法,验证各PreferenceFragment是否有效 @Override protected boolean isValidFragment(String fragmentName) { // return super.isValidFragment(fragmentName); return true; } // 定义完参数设置的界面文件之后,接下来在PreferenceFragment程序中使用该界面布局 // 文件进行参数设置、保存十分简单,只要如下两步即可。 // 1.让Fragment继承PreferenceFragment // 2.在onCreate(Bundle savedInstanceState)方法中调用addPreferencesFr // omResource(..)方法加载指定的界面布局文件 public static class Prefs1Fragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); } } public static class Prefs2Fragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.display_prefs); // 获取传入该Fragment的参数 String website = getArguments().getString("website"); Toast.makeText(getActivity(), "网站域名是:" + website, Toast.LENGTH_LONG).show(); } }}

  代码下载:

  appcompat_v7:http://pan.baidu.com/s/1hqCnYF6

  OtherActivity:

转载于:https://www.cnblogs.com/heweiquan/p/4847609.html

你可能感兴趣的文章
java-网络编程-使用URLDecoder和URLEncoder
查看>>
最短路之dijkstra算法
查看>>
SHDP--Working With HBase (二)之HBase JDBC驱动Phoenix与SpringJDBCTemplate的集成
查看>>
Lua语法基础(一)
查看>>
.Net Core2.*学习手册
查看>>
实验一、命令解释程序的编写实验
查看>>
2018年11月14日 学习字符串用法2
查看>>
2019年5月26日 re模块2
查看>>
Python学习笔记(一)——初学Python
查看>>
顺序表应用8:最大子段和之动态规划法(SDUT 3665)
查看>>
Python内置函数(52)——range
查看>>
正则表达式
查看>>
c# 执行 sql service 的存储过程
查看>>
《软件构架实践》读后感03
查看>>
jQuery入门(4)jQuery中的Ajax应用
查看>>
Java 发送http GET/POST请求
查看>>
索引之详解一
查看>>
Android Jetpack组件
查看>>
使用.NET Core 2.1的Azure WebJobs
查看>>
JS生成GUID
查看>>