ListActivity ListView的id为什么要用@android:id/list

今天用到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)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值