2016-06-19 6 views
0

Fragmentクラスの "OnCreateView"でinflateメソッドを呼び出すときは、アンドロイド:id値で指定されたIDを持つフラグメントを取得すると予想されます。 しかし、コンテナIDと同じIDを取得します。アンドロイド:idと異なるidを持つフラグメント

relativeLayoutにプログラムでフラグメントを追加しようとしています。ここに示す例では、フラグメントが2つあり、RelativeLayout.BELOWパラメータを設定する必要があります。ここ

コードはtopsection断片(ts_fragment)から、である。

XMLは次のようになり:ここ

<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 
. 

フラグメントを追加するためのコードである:

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; 
} 

ビューは "fragmentLayout"のIDを取得しますが、フラグメントは別のID、コンテナ1を取得します。これにより、IDを区別せずにフラグメントを別のものに置きます。

これを避けるには?ありがとう。 )topFragment.getId(が、それはContainerIDのを返します。

EDIT

は、私のようなものを使用してみました。 javadocはこう言っています:

このフラグメントがわかっている識別子を返します。これは、レイアウトで提供された アンドロイド:id値か、フラグメントを追加するときにコンテナビューID が提供されます。

私はちょうどコンテナビューのIDが欲しくない、フラグメントがアンドロイドを持つように強制する方法はありますか:id value?異なるIDを印刷しようと

UPDATE

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

はい。 fragment.setTag()を使用してください –

+0

@TinTranはこの強制フラグメントにアンドロイド:id値を取得させますか? –

+0

フラグメントはデフォルトでコンテナのIDを持ちます。 Android:idは、フラグメント内のビューのIDです。タグとフラグメントのIDは関連していません –

答えて

0

使用fragment.setTag() フラグメントデフォルトでコンテナのIDを有しています。 Android:idは、フラグメント内のビューのIDです。タグとフラグメントIDが関連していない

+0

これで問題は解決しません...RelativeLayout.BELOWパラメータを設定するにはIDを指定する必要があります –

+0

できます。代わりにfindFragmentById、私は追加ルール(RelativeLayout.BELOW、topFragment.getId()) でLayoutParams.RelativeLayout設定してい ...あなたは自分の無知のために申し訳ありませんFragmentManager –

+0

にfindFragmentByTagを呼び出すことができますが、私はあなたを理解していません getIdは私を助けないので、私はidパラメータとしてR.id.ts_fragmentを使いますが、何らかの理由で私の2番目の断片が消えてしまいます... –

0

は、ここでは、キーは私のG​​UIの設定のバグだった

を解決しました。一番上のフラグメントは幅と高さでMATCH PARENTに設定されました! 2番目のものが表示されることはありません。

つまり、少なくとも最初のフラグメントのLayoutParamsのHEIGHTパラメータでWRAP_CONTENTを設定すると、動作するようになります。

フラグメントIDは不要ですが、重要なのはフラグメントビューのIDを知ることです。

関連する問題