Activity

各种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<String> adapter = new ArrayAdapter<String>(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<Header> 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:

posted @ 2015-09-29 23:39  汝此彩笔  阅读(281)  评论(0编辑  收藏  举报