2013-06-22 2 views
1

У меня есть два формата xml-файлов, в Main.xml есть кнопка с именем android: id = "@ + id/btnClose", а в About.xml есть кнопка с именем android: id = "@ + id/btnClose ", Это нормально? Благодаря!Идентификатор в разных макетах xml должен быть другим?

main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:paddingTop="3dip" 
    android:layout_marginTop="3dip" 
    android:background="#DCDCDC" > 

    <Button 
     android:id="@+id/btnClose" 
     style="@style/myTextAppearance" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:text="@string/exit" /> 
</RelativeLayout> 

About.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:paddingTop="3dip" 
    android:paddingLeft="7dip" 
    android:background="@drawable/border_ui" 
    android:orientation="vertical" > 

    <Button 
     android:id="@+id/btnClose" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     style="@style/myTextAppearance" 
     android:text="@string/myreturn" /> 


</LinearLayout> 
+0

Да, он должен работать нормально ... – Noman

ответ

2

Это может быть одинаково.

Но, чтобы избежать путаницы/двусмысленности, лучше иметь разные идентификаторы, как было предложено черным ремнем.

Вы можете установить findViewById текущей иерархии представлений. Поэтому, если у вас одинаковые идентификаторы в разных макетах xml, все в порядке.

Если у вас есть ниже

setContentView(R.layout.main) 
Button b = (Button) findViewById(R.id.btnClose); // initialize button 

Вы можете findViewById текущей иерархии представлений. В вашем случае main.xml

Если у вас есть ниже

setContentView(R.layout.about); 
Button b = (Button) findViewById(R.id.btnClose); // initialize button 

Обе вышеуказанные случаи справедливы сог как main.xml и about.xml имеют кнопку с идентификатором @+id/btncClose

Предположим, у вас есть вторая кнопка с идентификатором @+id/button2 в about.xml и у вас есть

setContentView(R.layout.main); 
Button b = (Button) findViewById(R.id.button2); 

Вы получите NullPointerException, потому что ваша текущая иерархия представлений, заданная для активности, составляет main.xml, а не about.xml. main.xml не имеет кнопки с идентификатором button2.

2

Нет это не является обязательным. findViewById() относится к текущей иерархии представлений. Имо предпочтительно избегать двусмысленности

1

Да, это нормально, поскольку оба идентификатора находятся в разных xml. Но вы в какой-то момент будете в замешательстве, если будете регулярно использовать эти идентификаторы в кодировке. Поэтому хорошо иметь разные идентификаторы, например @+id/btnCloseMain и @+id/btnCloseAbout.

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