What is difference between @+id/android:list and @+id/list
I am wondering what's the difference between @+id/android:list
and @+id/list
. I know the last one which is a regular id assignment but the first looks different. What makes it special?
Where I saw it: I was studying on ListView, ListAdapter and things like that and the author define the ListView in layout xml file as below :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView
android:id="@+id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
<TextView
android:id="@+id/android:empty"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/main_no_items"/>
</LinearLayout>
and also let me mention @+id/android:empty
id as well.
And he also extends ListActivity
class.
Here is the source of the article.
And also what's in my mind as questions are :
- Should we extend
ListActivity
? Maybe I want an Activity which also contains other Views. - We use
@+id/android:list
just because we extendListActivity
or we can use the same convention if we extendActivity
?
Thanks.
Solution 1:
Resource IDs in Android are specific to a package (which is good, or else you'd have lots of conflicts if your app is dealing with several packages at the same time).
@+id/list
will create a resource ID in your app (=your package) with the name "list" and give it a unique ID. In code, that would be R.id.list
.
@android:id/list
will use the ID "list" from the package android (which, in code, would be android.R.id.list
.
EDIT: Need to add the corrections David Hedlund pointed out: The proper reference would be @android:id/list
. Also, +
indicates you're defining a new ID - you obviously don't need that when you're referencing something that was defined in the Android API.
Solution 2:
I think the example code you posted has a typo, so it should be @android:id/list
(without the +). From the ListActivity javadoc:
your own view MUST contain a ListView object with the id "@android:id/list"
@android:id/list
is specific to ListActivity, so you do not need it if you are adding a ListView into any other kind of Activity. You should extend ListActivity if you want the user to do more than view the list. For example, you can override ListActivity.onListItemClick
to respond to clicks on an item in the list.
Similarly, @id/android:empty
(again, without the +), is a special case for ListActivity. This allows you to specify an alternative view that should be displayed when your list is empty. That View will not be displayed when the list is populated.