2016-12-19 2 views
0

Ich verwende ein benutzerdefiniertes Steuerelement, das ein Spinner im relativen Layout hat. In meiner Aktivität muss ich zwei dieser benutzerdefinierten Steuerelemente verwenden. Das Problem besteht darin, dass beim Zugriff auf den Spinner aus der Aktivität dieselbe ID zurückgegeben wird.enthalten benutzerdefinierte Layouts mit gleichen Kind-IDs

Code für benutzerdefinierte Steuerung

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    > 


    <Spinner 
     android:id="@+id/spinner" 
     android:layout_width="fill_parent" 
     android:layout_height="40dp" 
     android:layout_alignParentLeft="true" 
     android:background="@drawable/bg_white" 
     android:popupBackground="@drawable/bg_white"/> 
    <Button 
     android:layout_width="15dp" 
     android:layout_height="10dp" 
     android:layout_marginRight="8dp" 
     android:layout_marginLeft="8dp" 
     android:layout_marginTop="10dp" 
     android:layout_marginBottom="20dp" 
     android:layout_centerVertical="true" 
     android:layout_alignParentRight="true" 
     android:layout_centerInParent="false" 
     android:clickable="false" 
     android:background="@drawable/btn_dropdown"/> 
</RelativeLayout> 

Aktivitätscode:

RelativeLayout rl_category,rl_subcategory; 
    Spinner sp_category,sp_subcategory; 

    rl_category=(CustomSpinner) findViewById(R.id.sp_category); 
    rl_subcategory=(CustomSpinner) findViewById(R.id.sp_subcategory); 
    sp_category=(Spinner) rl_category.findViewById(R.id.spinner); 
    sp_subcategory=(Spinner) rl_subcategory.findViewById(R.id.spinner); 

Wenn Android unterscheidet nicht diese IDs in derselben Aktivität dann, wie sollte ich mehrere benutzerdefinierte Layouts in Aktivität hinzufügen.

Antwort

0

Im selben xml Layout können Sie dieselbe ID nicht zweimal verwenden. Auf sehr einfache Weise können Sie zwei benutzerdefinierte Steuerelemente mit einer anderen Spinner-ID deklarieren. Sie möchten die benutzerdefinierten Steuerelemente wiederverwenden, tun Sie dies in anderen Aktivitäten als Ihre Anforderungen.

0

Wenn Sie eine ID erklären es in R.java Klasse in einem numerischen Muster speichern hat, so dass Sie jedes zwei oder mehr Widgets/Layout mit demselben Namen in derselben XML erklären dann wird es Ihnen gleiches numerisches Ergebnis zurück . Sie müssen die IDs ändern. hoffe, es wird dir helfen.

0

Sie können id in derselben XML-Datei nicht mehrmals verwenden. Um dies zu tun, können Sie das benutzerdefinierte Steuerelementlayout mehrmals in das XML-Verzeichnis der Aktivität einbeziehen.

Hier habe ich das benutzerdefinierte Layout enthalten zweimal

activity_main.xml

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <include 
    android:id="@+id/customControl1" 
    layout="@layout/custom_layout"/> 

    <include 
    android:id="@+id/customControl2" 
    layout="@layout/custom_layout"/> 

</LinearLayout> 

und in Aktivität Code

sp_category=(Spinner) findViewById(R.id.customControl1).findViewById(R.id.spinner); 
sp_subcategory=(Spinner) findViewById(R.id.customControl2).findViewById(R.id.spinner); 

custom_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    > 


    <Spinner 
     android:id="@+id/spinner" 
     android:layout_width="fill_parent" 
     android:layout_height="40dp" 
     android:layout_alignParentLeft="true" 
     android:background="@drawable/bg_white" 
     android:popupBackground="@drawable/bg_white"/> 
    <Button 
     android:layout_width="15dp" 
     android:layout_height="10dp" 
     android:layout_marginRight="8dp" 
     android:layout_marginLeft="8dp" 
     android:layout_marginTop="10dp" 
     android:layout_marginBottom="20dp" 
     android:layout_centerVertical="true" 
     android:layout_alignParentRight="true" 
     android:layout_centerInParent="false" 
     android:clickable="false" 
     android:background="@drawable/btn_dropdown"/> 
</RelativeLayout> 
Verwandte Themen