2016-06-19 7 views
0

Immer wenn ich die inflame-Methode in "OnCreateView" in Fragment-Klasse aufrufen, erwarte ich ein Fragment mit der ID Android-ID-Wert angegeben. Aber ich bekomme eine andere ID, die gleiche der ContainerID.Android - Fragment mit unterschiedlicher ID von Android: ID

Ich versuche, Fragmente in einem relativenLayout programmatisch hinzuzufügen, und für das hier gezeigte Beispiel habe ich zwei Fragmente und eines muss RelativeLayout.BELOW Parametersatz haben.

Hier ist der Code, der topsection Fragment (ts_fragment):

Die XML wie folgt aussieht:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent" 
    android:id="@+id/ts_fragment"> 
. 
.-->other stuff 
. 

Hier ist der Code-Fragment hinzuzufügen:

public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) { 

    View view=inflater.inflate(fragmentLayout,container,false); 

    setGraphics(view); //custom function which gets views and sets gui. 

    return view; 
} 

die View bekommt die ID von "fragmentLayout", aber Fragment bekommt eine andere ID, den Container, und das bringt meine Fragmente dazu, sich übereinander zu stellen, ohne ID zu unterscheiden.

Wie vermeide ich das? Vielen Dank.

EDIT

ich wie mit so etwas versucht: topFragment.getId(), aber es die containerID zurückgibt. Das Javadoc sagt:

Geben Sie den Bezeichner zurück, von dem dieses Fragment bekannt ist. Dies ist entweder der Android-ID-Wert, der in einem Layout bereitgestellt wird, oder die Containeransichts-ID , die beim Hinzufügen des Fragments angegeben wird.

Ich möchte nur nicht die Container-Ansicht ID, gibt es eine Möglichkeit, das Fragment zu zwingen, Android: ID-Wert?

UPDATE

Der Versuch, die verschiedenen IDs zu drucken:

My_Android: Main layout has id: 2131492958 //R.id.MainLayout ->ContainerID 
My_Android: MyTopFragment{5cd93c9} - id: 2130968617 //R.id.ts_fragment value 
My_Android: MyBottomFragment{2055ace} - id: 2130968601 //R.id.bs_fragment value 

My_Android: MyTopFragment has ID: 2131492958 //After inflating process, the fragment gets this id, the same of R.id.MainLayout 
My_Android: MyBottomFragment has ID: 2131492958 //Idem 
+0

Ja. Verwenden Sie fragment.setTag() –

+0

@TinTran wird dieses Force-Fragment den Android: ID-Wert erhalten? –

+0

Fragment hat standardmäßig die ID des Containers. Android: id ist die ID der Ansicht mit in dem Fragment. Tag und Fragment ID sind nicht verwandt –

Antwort

0

Verwendung fragment.setTag() Fragment durch Standard hat die ID des Behälters. Android: id ist die ID der Ansicht mit in dem Fragment. Tag und Fragment-ID nicht

+0

Dies löst das Problem jedoch nicht ...Ich muss eine ID geben, um RelativeLayout.BELOW Parameter –

+0

Sie können. aber statt findFragmentById, könnten Sie findFragmentByTag auf FragmentManager –

+0

Sorry für meine Unwissenheit nennen, aber ich verstehe dich nicht ... Ich gründe LayoutParams.RelativeLayout mit addrule (RelativeLayout.BELOW, topFragment.getId()) jetzt, da getId mir nicht hilft, verwende ich R.id.ts_fragment als ID-Parameter, aber aus irgendeinem Grund verschwindet mein zweites Fragment ... –

0

GELöST Zusammenhang Der Schlüssel hier war ein Fehler in meiner gui Einstellung. das oberste Fragment wurde auf MATCH PARENT in BREITE und HÖHE gesetzt! also keine Chance, dass der zweite gezeigt wird.

Das besagt WRAP_CONTENT, zumindest für HEIGHT-Parameter in LayoutParams für das erste Fragment, Dinge funktioniert.

Es wurde keine Fragment-ID benötigt, wichtig ist die ID der FRAGMENT-ANSICHT.