动态ImageView的标识符
问题描述:
我正在构建一个应用程序,我必须更改我的布局中的ImageView元素的源。动态ImageView的标识符
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="24sp"/>
<ImageView
android:id="@android:id/image1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/res0"
android:contentDescription="@string/description" />
<TextView
android:id="@android:id/text2"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
在相同的布局我有一个TextView元件,其中,我已经定义android:id="@android:id/text1"
作为标识符。在我的活动我然后相应地更改文本的用户输入(在此特定情况下,当前选项卡的用户是),像这样:
View rootView = inflater.inflate(R.layout.fragment_section_scientist, container, false);
Bundle args = getArguments();
int id = args.getInt(ARG_SCIENTIST_ID);
TextView name = (TextView) rootView.findViewById(android.R.id.text1);
TextView description = (TextView) rootView.findViewById(android.R.id.text2);
ImageView image = (ImageView) rootView.findViewById(android.R.id.image1);
if (id == 1) {
name.setText(getString(R.string.name1));
description.setText(getString(R.string.text1));
image.setImageResource(R.drawable.res1);
} else {
name.setText(getString(R.string.name2));
description.setText(getString(R.string.text2));
image.setImageResource(R.drawable.res2);
}
我想同样的事情在ImageView的,设置android:id="@android:id/image1"
,但Eclipse总是说没有找到与给定名称匹配的资源。我究竟做错了什么?
答
通过使用android.R.id.text1
您不是创建一个ID,但正在使用一个内置的ID,但没有内置的android.R.id.image1
。
您需要创建自己的ID为ImageView的,而不是
android:id="@android:id/image1"
所以在你的XML做
android:id="@+id/image1"
这告诉编译器创建一个在编译时称为image1
新的ID 。这种方式创建IDS它们不能通过android.R.id.???
,因为这是用于在建的唯一ID,因此您的活动,而不是
ImageView image = (ImageView) rootView.findViewById(android.R.id.image1);
做
ImageView image = (ImageView) rootView.findViewById(R.id.image1);
作品!那些保留的ID实际上用于什么? – Ciambello
@Ciambello @Ciambello他们在那里主要是因为你需要使用内置的id来使用某些元素的功能,例如使用'ListActivity'你的布局必须具有'ListView'和'id =“@ android:id /列表“' –