zoukankan      html  css  js  c++  java
  • 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:

  • 相关阅读:
    javascript深入理解js闭包
    hibernate 之 sql查询
    MongoDB 2.4企业版分析
    MongoDB 连接池
    GridFS实现原理
    MongoVUE破解
    mongodb 官方 手册
    mongodb的一些性能管理工具
    Python: names, values, assignment and mutability
    使用 mock 测试
  • 原文地址:https://www.cnblogs.com/heweiquan/p/4847609.html
Copyright © 2011-2022 走看看