动态ImageView的标识符

时间:2013-12-19 01:07:45

标签: android-layout android-fragments android-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一直说没有找到与给定名称匹配的资源。我做错了什么?

1 个答案:

答案 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);