不定期更新,无废话开始:List<Integer>不是List<Number>的子类,但List<Integer>是Collection<Integer>的子类。
- 一个List<? extends Number>的对象引用可以被赋值任何以Number或其子类为泛型的List或其子类的对象实例引用,如下例
1 List<? extends Number> nums = new ArrayList<Integer>();
- 泛型方法可以显示指定其返回结果的泛型类型,如下例
1 Arrays.<Object>asList(1, 1.2, "Hello");
2 Collections.<Number>copy(objs, ints);
- Get与Put原则:当仅从结构中取出值则使用extends通配符,当仅向结构中添加值则使用super通配符,当对一个结构即取出又添加值时不要使用任何通配符。
1 //Collections.copy方法即使用super又使用extends的例子
2 public static <T> void copy(List<? super T> dest, List<? extends T> src)
1 //另一个例子,对同一个结构即取值又设值,不使用任何通配符
2 public static double sum(Collection<? extends Number> nums) {
3 double s = 0.0;
4 for (Number num : nums) s += num.doubleValue();
5 return s;
6 }
7
8 public static void count(Collection<? super Integer> ints, int n) {
9 for (int i = 0; i < n; i++) ints.add(i);
10 }
11
12 //注意这个方法参数的签名,没有使用任何通配符
13 public static double sumCount(Collection<Number> nums, int n) {
14 count(nums, n);
15 return sum(nums);
16 }
启动应用
onCreate
onStart
onResume
按退出键
onPause
onStop
onDestory
按HOME键或当前应用被其他全屏应用覆盖时(如电话呼入)
onPause
onStop
按HOME键后,再次点击应用图标或长按HOME键点击任务列表中的应用图标或覆盖当前应用的其他全屏应用退出后
onRestart
onStart
onResume
被弹出对话框覆盖时(如弹出短信提醒对话框)或屏幕关闭时
onPause
对话框关闭时或屏幕点亮时
onResume
横竖屏切换时
onPause
onStop
onDestory
onCreate
onStart
onResume
ImageView中有setImageURI,但是传递一个URI.parse("http://www.google.com.hk/tools/dlpage/res/chrome/images/chrome-205_noshadow.png")这样的URL路径不能成功载入网络上的图片,最终还是需要借助java.net.URL,如下代码所示:
1 URL picUrl = new URL("http://www.google.com.hk/tools/dlpage/res/chrome/images/chrome-205_noshadow.png");
2
3 Bitmap pngBM = BitmapFactory.decodeStream(picUrl.openStream());
4
5 imageView.setImageBitmap(pngBM);
很简单吧,哪位朋友如果有更简单的方法请通知我。
懒得再翻译,这段应该很好理解,直接将Dev Guide中复制过来。
The SharedPreferences
class provides a general framework that allows you to save and retrieve persistent key-value pairs of primitive data types. You can use SharedPreferences
to save any primitive data: booleans, floats, ints, longs, and strings. This data will persist across user sessions (even if your application is killed).
To get a SharedPreferences
object for your application, use one of two methods:
getSharedPreferences()
- Use this if you need multiple preferences files identified by name, which you specify with the first parameter.
getPreferences()
- Use this if you need only one preferences file for your Activity. Because this will be the only preferences file for your Activity, you don't supply a name.
To write values:
- Call
edit()
to get a SharedPreferences.Editor
.
- Add values with methods such as
putBoolean()
and putString()
.
- Commit the new values with
commit()
To read values, use SharedPreferences
methods such as getBoolean()
and getString()
.
Here is an example that saves a preference for silent keypress mode in a calculator:
1public class Calc extends Activity {
2 public static final String PREFS_NAME = "MyPrefsFile";
3
4 @Override
5 protected void onCreate(Bundle state){
6 super.onCreate(state);
7 . . .
8
9 // Restore preferences
10 SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
11 boolean silent = settings.getBoolean("silentMode", false);
12 setSilent(silent);
13 }
14
15 @Override
16 protected void onStop(){
17 super.onStop();
18
19 // We need an Editor object to make preference changes.
20 // All objects are from android.context.Context
21 SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
22 SharedPreferences.Editor editor = settings.edit();
23 editor.putBoolean("silentMode", mSilentMode);
24
25 // Commit the edits!
26 editor.commit();
27 }
28}
首先内部存储路径为/data/data/youPackageName/,下面讲解的各路径都是基于你自己的应用的内部存储路径下。所有内部存储中保存的文件在用户卸载应用的时候会被删除。
一、 files
1. Context.getFilesDir(),该方法返回/data/data/youPackageName/files的File对象。
2. Context.openFileInput()与Context.openFileOutput(),只能读取和写入files下的文件,返回的是FileInputStream和FileOutputStream对象。
3. Context.fileList(),返回files下所有的文件名,返回的是String[]对象。
4. Context.deleteFile(String),删除files下指定名称的文件。
二、cache
1. Context.getCacheDir(),该方法返回/data/data/youPackageName/cache的File对象。
三、custom dir
getDir(String name, int mode),返回/data/data/youPackageName/下的指定名称的文件夹File对象,如果该文件夹不存在则用指定名称创建一个新的文件夹。
在MYSQL中如果在建表的时候没有指定Timestamp字段是否为NULL,则系统自动添加默认值,使用DEFAULT NULL也不好用,其实是可以使用NULL直接指定的,如下:
`CREATE_DATE` TIMESTAMP NULL
style和currentStyle都能用来取得当前样式表中的信息,但是style只能取得在HTML中用style声明的样式表信息,无法取得通过class声明的样式表信息,而currentStyle两种声明方式都可以取得。
我的测试环境是IE8,对于事件clone要注意一下3点:
1.运行时添加的事件不会被克隆,如下例:
1a = document.getElementById('a'); //假设a是一个div
2 a.onclick = function () { alert(this.innerHTML); }
3b = a.cloneNode();
2.解析HTML时原来带的事件会被克隆,如下例:
1<div id='a' onclick='alert(this.innerHTML)'>aaaa</div>
3.通过attachEvent添加的事件会被克隆,如下例:
1a = document.getElementById('a');
2 a.attachEvent('onclick', function () {
3 alert(this.innerHTML);
4 });
5b = a.cloneNode();
最后如果想在clone时将节点其中的子节点一同clone的话,请使用cloneNode(true)。