2011-12-08 10 views
1

一部のビューは、LayoutInflaterを使用してフラグメントに挿入しようとしています。それらはTextViewsですが、私が追加する最初のものに値を設定できるように見えます。 IDの衝突が問題を引き起こしているように見えますが、私はこれを乗り越える方法を失っています。LayoutInflaterを使用してフラグメントに複数のビューを追加する

ViewGroup vg = (ViewGroup) inflater.inflate(R.layout.data_viewer, 
      container, false); 

    HashMap<String, Long> titles = mHelper.getTitles("firestations"); 

    for (String key : titles.keySet()) { 
     **View row = inflater.inflate(R.layout.row, vg, true); 
     TextView label = (TextView) row.findViewById(R.id.textView1); 
     label.setText(key);** 
     TextView value = (TextView) row.findViewById(R.id.textView2); 
     value.setText(getArg(key)); 
    } 

あなたは、私が「行」を膨らませていますスターを付けたラインから見ることができるように(これは中textView1とtextView2と呼ばれる2つのテキストを望むだけ水平直線レイアウトである:私のonCreateViewの 関連するビットは次のようになりますそれ)。私は膨らんだViewGroupのハンドルを提供し、親に添付されたビューを取得するためにtrueを渡します。これはすべてうまくいくようです。それから私はちょうど膨らませた行のfindViewByIdを呼び出します。私はこの発見がその特定の行の子どもたちだけを拾うと思っていたでしょう。 findがより広い範囲を使用していて、idの完全なセット(同じもの - すべてが同じxmlのもの)と一致しているようです。それは私に最初のものを返す。 この結果、TextViewの一番上のペアに表示されているデータの最後の行が正しくレイアウトされています。残りのテキストビューには、その中に定義されたxmlのデフォルトテキストがあります。

誰でもこの問題を回避する方法を知っていますか?サポートコードにマイナーなバグがあるかもしれないよう

おかげで、

アンソニー・ノーラン

+0

ループ内の 'inflate()'呼び出しの3番目のパラメータに 'false'を使用して、' ViewGroup 'に行を追加してみてください(実際のパラメータを使用する代わりに)。 'を手動で設定してください。原則として、あなたが持っているものはよく見えるので、私はここで推測しています。また、私の書籍やオープンソースプロジェクトに関連するものには 'commonsware'タグを使用してください。この質問はどちらにも関係しません。 – CommonsWare

+0

私はあなたの提案を得る前にこれを試して、それは動作します。小さなバグのように見えますが、今は私がそこにいることを知っているので、私はそれを取り巻くことができます。タグについての公正なコメント。私はそれはちょうど「これを見てもらえますか?ご協力いただきありがとうございます。 –

答えて

1

が見えます。

for (String key : titles.keySet()) { 
     View row = inflater.inflate(R.layout.row, vg, false); 
     TextView label = (TextView) row.findViewById(R.id.textView1); 
     label.setText(key); 
     TextView value = (TextView) row.findViewById(R.id.textView2); 
     value.setText(getArg(key)); 
     vg.addView(row); 
    } 
関連する問題