6

アクティビティのレイアウト ファイルを作成しました。このレイアウトでは、textview と edittext を使用して LinearLayout を作成しました。ここで、元の LinearLayout とまったく同じビューを表示して含む追加の LinearLayouts を作成したいと思いますが、テキストは異なります。これらの LinearLayout の量は実行ごとに異なるため、実行中にプログラムで実行したいとも考えています。インフレータについていくつか読んだことがありますが、使用するには十分に理解していません。

私はこのようなことを考えています。明らかにコードが間違っていますが、私がやりたいことを理解していただければ幸いです。

LinearLayout llMain = (LinearLayout)findViewById(R.id.mainLayout);
LinearLayout llToCopy = (LinearLayout)findViewById(R.id.linearLayoutToCopy);
for(int player = 0; player < size; player++)
{
   LinearLayout llCopy = llToCopy.clone();
   TextView tv = (TextView)llCopy.getChildAt(0);
   tv.setText(players.get(player).getName());
   llMain.addView(llCopy);
}
4

2 に答える 2

16

これを行うにはいくつかの方法があります。
すばやく簡単な方法は、ループの反復ごとに新しいレイアウトをインフレートすることです。

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout parent = (LinearLayout) inflater.inflate(R.layout.main, null);

for (int i = 0; i < 10; i++) {
    View child = inflater.inflate(R.layout.child, null);
    TextView tv = (TextView) child.findViewById(R.id.text);
    tv.setText("Child No. " + i);
    parent.addView(child);
}

setContentView(parent);

もう 1 つの (より洗練された) 解決策は、LinearLayout を拡張する別のクラスを作成することです。

public class ChildView extends LinearLayout {

    private TextView tv;

    public ChildView(Context context) {
        super(context);

        View.inflate(context, R.layout.child, this);
        tv = (TextView) findViewById(R.id.text);
    }

    public void setText(String text) {
        tv.setText(text);
    }
}

ChildViewこれで、ループのすべての反復でa を作成し、setText(String text)メソッドを介してテキストを設定できます。

for (int i = 0; i < 10; i++) {
    ChildView child = new ChildView( this );
    child.setText("Child No. " + i);
    parent.addView(child);
}
于 2013-02-10T15:14:07.177 に答える
4

レイアウトインフレータを使用してそれを実現できます

これを使用してレイアウトインフレータを取得します

LayoutInflater inflater = (LayoutInflater) context.getSystemService
      (Context.LAYOUT_INFLATER_SERVICE);
LinearLayout newlayout = inflater.inflate(R.layout.yourlayout, null);

// newlayout is the copy of your layout and you can use it and to get 
// the textview and edittext do it like this

TextView text = (TextView) newlayout.findView(R.id.yourtextviewid);
text.setText("new text");
EditText et = (EditText) newlayout.findView(R.id.yourtextviewid);
于 2013-02-10T15:08:38.450 に答える