动态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); 
+0

作品!那些保留的ID实际上用于什么? – Ciambello

+0

@Ciambello @Ciambello他们在那里主要是因为你需要使用内置的id来使用某些元素的功能,例如使用'ListActivity'你的布局必须具有'ListView'和'id =“@ android:id /列表“' –