2 o19830015 o19830015 于 2013.06.18 16:32 提问

findViewby() 与listView的使用

正在开发listView,在main代码中选择listView:

lv = (ListView) findViewById(R.layout.activity_main.xml.id);

XML的目录结构:

res>layout>activity_main.xml

main_activity.xml文件中,如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true" >
    </ListView>

</RelativeLayout>

我不是很理解XMLid值在Android中使用的原理,请高手解答,谢谢。

7个回答

cj6585256
cj6585256   2013.06.18 20:20
已采纳

<ListView
android:id="@android:id/list"
这个id代表的是使用android系统listView的id

findviewById的话应该是findviewById(android.R.id.xxxx.list);

可以使用 <ListView
android:id="@+id/list"
@+id/list 代表的自己创建一个id叫list 会在R.java中自动生成
这样的话就能直接在findviewById(R.id.list);获取listView, 注意这个R导入的包名是你项目的包名
格式应该是yourpackage.R

Jave_
Jave_   2013.06.18 17:58
lv = (ListView) findViewById(R.id.list);

main_activity.xml文件:

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ListView
        android:id="@+id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true" >
    </ListView>
</RelativeLayout>
ll_0520
ll_0520   2013.06.18 21:43

@android:id/list是系统ListActivity默认布局中的ListView的ID,如果使用自己布局中的ListView,ID应设置为@+id/list

hilter1949
hilter1949   2013.06.19 11:39

@+id表示为控件增加一个唯一标识id,@id表示引用一个已经定义过的id,如果因为内存不存导致activity被回收重新打开而执行onSaveInstanceState()函数时,没有定义id的控件不能自动进行数据的保存和恢复操作。

pingchuanyang
pingchuanyang   2013.06.25 11:25

这其实是一个map操作,R.java文件里存放的是归了类的键值,那个id值就是map的一个键值,findViewById()方法根据这个键值找到对应的对象返回,返回的对象类型在Java里默认是Object,所以findViewById前面需要进行类型转换。

davidsu33
davidsu33   2013.06.24 16:56

xml的ID会转换为对应控件的对象

mojieke
mojieke   2013.06.24 17:10

ID就是一个唯一标识码,它会在你编译时存入R文件中,在你的activity控制器中,通过ID找到你需要的控件、图片、声音等内容,进行业务逻辑操作

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!