2013-12-19 5 views
0

Я создаю приложение, где мне нужно изменить источник элемента 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 продолжает говорить, что ресурс не найден, который соответствует данному имени. Что я делаю не так?

ответ

0

С помощью android.R.id.text1 вы не создаете идентификатор, но используете встроенный идентификатор, однако в нем нет встроенного android.R.id.image1.

Вы должны создать свой собственный идентификатор для ImageView, поэтому в вашем XML вместо

android:id="@android:id/image1" 

сделать

android:id="@+id/image1" 

это говорит компилятору, чтобы создать новый идентификатор, называемый image1 во время компиляции , Идентификаторы, созданные таким образом, не доступны через android.R.id.??? как это используется только в построенных идентификаторами, поэтому в вашей деятельности вместо

ImageView image = (ImageView) rootView.findViewById(android.R.id.image1); 

сделать

ImageView image = (ImageView) rootView.findViewById(R.id.image1); 
+0

Works! Каковы эти зарезервированные идентификаторы, используемые на самом деле? – Ciambello

+0

@Ciambello. Они существуют в основном потому, что вам необходимо использовать встроенные идентификаторы для использования функций определенных элементов, например, для использования «ListActivity» в вашем макете должен быть «ListView» с идентификатором 'id =" @ android: id/список "' –

Смежные вопросы