ListActivity ListView的id为什么要用@android:id/list
2015-03-24 18:34
369 查看
今天用到ListActivity这个Activity的子类,发现了一个问题,就是以前我们在学ListActivity的时候,如果用到了ListActivity,我们用自己定义的布局的时候,ListView控件的id必须要写成@id/android:list或者@android:id/list(区别下面说),还有我用了@+id/android:list竟然也是可以的。
好吧,那我们开始看看ListActivity的源码吧。
用listview,必须要setAdapter()是吧,ListAcitivty中是用setListAdapter()设置适配器的。那先从ListActivity的setListAdapter()这个方法进去看看,发现会调用ensureList()这个方法
mList!=null 说的就是如果你在代码中setContentView() 那么就直接返回,如果没有就设置成com.android.internal.R.layout.list_content_simple 那么我们看看这个资源文件在哪。
在我的电脑路径是在F:\sdk\platforms\android-19\data\res\layout 这下面。
我们看到 他的id是引用了@android:id/list,那自然我们自己写的资源文件中也要引用这个。
那我们看看@+id/android:list 和@id/android:list 有什么区别???
当你引用了Android API中定义的东西,应该适当的用 @id/android:list,另外+表示你定义了一个新的ID,意味着为R文件添加了一些东西,为什么这里@+id/android:list,R资源没有添加上这个十六进制的变量呢?我个人认为是如果添加的是android api中定义的id,那么就会去android定义的包,然后告诉它我要加这个这个资源的ID,那么就直接覆盖了android定义的包里面的R文件的ID。
再看看@id/android:list 和 @android:id/list 有什么区别???
@android:id/list 和@id/android:list其实是一样的。
第一个例子:@ id/android:list将去寻找android包内的list这个id。
第二个例子:@android:id/list,首先定义了android的包,然后告诉它查找该包内的id/list。
只是写法不同,反正最终都是会去找android.R.id.list(就像你被人打,和别人打你,都是挨打),看官方的是用@android:id/list,所以我们还是用官方说的这个吧,谁让我们是开发者。
至于id上随便定义,比如:
爽了吧,报错了,让你别这么干。
总结:1.用ListActivity的时候,如果你要自定义layout,那id的属性就用@android:id/list。
2.其实@android:id/list,用代码来写也是和自己+id的时候一样findViewById(android.R.id.list)
<ListView android:id="@+id/android:list" android:layout_height="wrap_content" android:layout_width="match_parent" />
好吧,那我们开始看看ListActivity的源码吧。
用listview,必须要setAdapter()是吧,ListAcitivty中是用setListAdapter()设置适配器的。那先从ListActivity的setListAdapter()这个方法进去看看,发现会调用ensureList()这个方法
private void ensureList() { if (mList != null) { return; } setContentView(com.android.internal.R.layout.list_content_simple); }
mList!=null 说的就是如果你在代码中setContentView() 那么就直接返回,如果没有就设置成com.android.internal.R.layout.list_content_simple 那么我们看看这个资源文件在哪。
在我的电脑路径是在F:\sdk\platforms\android-19\data\res\layout 这下面。
<ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="match_parent" android:drawSelectorOnTop="false" />
我们看到 他的id是引用了@android:id/list,那自然我们自己写的资源文件中也要引用这个。
那我们看看@+id/android:list 和@id/android:list 有什么区别???
当你引用了Android API中定义的东西,应该适当的用 @id/android:list,另外+表示你定义了一个新的ID,意味着为R文件添加了一些东西,为什么这里@+id/android:list,R资源没有添加上这个十六进制的变量呢?我个人认为是如果添加的是android api中定义的id,那么就会去android定义的包,然后告诉它我要加这个这个资源的ID,那么就直接覆盖了android定义的包里面的R文件的ID。
再看看@id/android:list 和 @android:id/list 有什么区别???
@android:id/list 和@id/android:list其实是一样的。
第一个例子:@ id/android:list将去寻找android包内的list这个id。
第二个例子:@android:id/list,首先定义了android的包,然后告诉它查找该包内的id/list。
只是写法不同,反正最终都是会去找android.R.id.list(就像你被人打,和别人打你,都是挨打),看官方的是用@android:id/list,所以我们还是用官方说的这个吧,谁让我们是开发者。
至于id上随便定义,比如:
<ListView android:id="@+id/balabala" android:layout_height="wrap_content" android:layout_width="match_parent" />
爽了吧,报错了,让你别这么干。
总结:1.用ListActivity的时候,如果你要自定义layout,那id的属性就用@android:id/list。
2.其实@android:id/list,用代码来写也是和自己+id的时候一样findViewById(android.R.id.list)
相关文章推荐
- ListActivity/ListView用法 与 @+id 与 @android:id 关系小解
- Android:ListView、ListActivity、 setListAdapter
- 解决Your content must have a ListView whose id attribute is ‘android.R.id.list
- Your content must have a ListView whose id attribute is 'android.R.id.list'
- 解决Your content must have a ListView whose id attribute is 'android.R.id.list'
- Your content must have a ListView whose id attribute is 'android.R.id.list'解决办法
- Your content must have a ListView whose id attribute is 'android.R.id.list' 解决方法
- 用到ListActivity中 , @+id/android:list"和"@android:id/list"的写法
- Android—Android中 Your content must have a ListView whose id attribute is 'android.R.id.list'错误的解决办法
- 安卓开发——错误提示:Your content must have a ListView whose id attribute is 'android.R.id.list'
- ListActivity/ListView用法 与 @+id/ 与 @android:id 关系小解
- Your content must have a ListView whose id attribute is 'android.R.id.list' 【Android 报错】
- listview ID 为啥必须是@id/android:list
- Your content must have a ListView whose id attribute is 'android.R.id.list'z
- <ListView android:id="@+id/android:list" 在 list 前加 android: 的原因
- Your content must have a ListView whose id attribute is 'android.R.id.list'
- ListView问题:Your content must have a ListView whose id attribute is 'android.R.id.list'
- Your content must have a ListView whose id attribute is 'android.R.id.list'
- Android报错:Your content must have a ListView whose id attribute is 'android.R.id.list'
- Your content must have a Listview whose id attribute is 'android.R.id.list'