2

コードで LinearLayout を動的に追加する必要があるアクティビティがあります (ユーザー入力に依存するため)。だから、ここに私がしたことがあります:

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout lyt = (LinearLayout) inflater.inflate(R.layout.row_edit, mLytRows);
TextView tvName = (TextView) lyt.findViewById(R.id.name_textview);
tvName.setText(user.getName());

ここR.layout.row_editで、TextView を含むいくつかのビューがある LinearLayout と、レイアウトmLytRowsを追加する参照された LinearLayout (UI の XML で定義) を示しrow_editます。

ユーザー入力に基づいて、このコードを数回繰り返しますが、ここに問題があります。TextView を参照しようとすると、追加した最初の LinearLayout の TextView が取得されます。

なんで?どうすれば解決できますか?

4

2 に答える 2

1

ドキュメントをよく見てください。

で 2 番目の引数を指定するinflate()と、メソッドは膨張したビューではなく、親を返します。

したがって、lyt常にあなたの親であり、 IDfindViewByIdで見つかった最初の要素を常に返します。R.id.name_textview

あなたはしたいかもしれません

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout lyt = (LinearLayout) inflater.inflate(R.layout.row_edit, null);
TextView tvName = (TextView) lyt.findViewById(R.id.name_textview);
tvName.setText(user.getName());
mLytRows.addView(lyt);

ViewGroupには、必要な場所にビューを配置する方法がいくつかあることがわかります。addView

于 2013-05-14T19:44:39.113 に答える