正在开发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中使用的原理,请高手解答,谢谢。
<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
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>
@android:id/list是系统ListActivity默认布局中的ListView的ID,如果使用自己布局中的ListView,ID应设置为@+id/list
@+id表示为控件增加一个唯一标识id,@id表示引用一个已经定义过的id,如果因为内存不存导致activity被回收重新打开而执行onSaveInstanceState()函数时,没有定义id的控件不能自动进行数据的保存和恢复操作。
xml的ID会转换为对应控件的对象
ID就是一个唯一标识码,它会在你编译时存入R文件中,在你的activity控制器中,通过ID找到你需要的控件、图片、声音等内容,进行业务逻辑操作
这其实是一个map操作,R.java文件里存放的是归了类的键值,那个id值就是map的一个键值,findViewById()方法根据这个键值找到对应的对象返回,返回的对象类型在Java里默认是Object,所以findViewById前面需要进行类型转换。