我正在构建一个应用程序,我必须在布局中更改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一直说没有找到与给定名称匹配的资源。我做错了什么?
答案 0 :(得分:0)
使用android.R.id.text1
您不是在创建ID,而是使用内置ID,但是没有内置android.R.id.image1
。
您需要为ImageView创建自己的ID,因此请使用XML而不是
android:id="@android:id/image1"
DO
android:id="@+id/image1"
这告诉编译器在编译时创建一个名为image1
的新id。以android.R.id.???
无法访问以这种方式创建的ID,因为它仅用于内置ID,因此在您的Activity中而不是
ImageView image = (ImageView) rootView.findViewById(android.R.id.image1);
DO
ImageView image = (ImageView) rootView.findViewById(R.id.image1);