您的位置:首页 > 移动开发 > Android开发

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竟然也是可以的。

<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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android ListView 属性id
相关文章推荐