0

画面にプログラムでボタンを追加したいのですが、解析して値を取得していますAPI。今は配列の長さに応じてボタンを表示したいと考えています。私はこれを行っていますが、最後のボタンのみを表示していますが、forループ内ではすべての値を正しく取得していますが、最後のボタンのみを表示しています。これは私のコードです:

RelativeLayout relate;

//...
relate = (RelativeLayout)findViewById(R.id.relative);

protected void onPostExecute(Void result) {
    if(dialog.isShowing() == true) {
        dialog.dismiss();
    }

    //int width = 100, height =50, x = 10, y = 20;

    for (int i =0;i<adapt_obj.city_name_array.length;i++){
        b1 = new Button(myref);

        b1.setText(adapt_obj.city_name_array[i]);

        relate.addView(b1);

        //relate.addView(b1, i,  new RelativeLayout.LayoutParams(width,height));

        //height = height+80;
    }

    listlocation.setAdapter(adapt_obj);
    adapt_obj.notifyDataSetChanged();
}
4

3 に答える 3

2

RelativeLayout配置ルールを指定しないと、追加したビューが上隅にスタックされます。ボタンはレイアウトに追加されますが、それらは互いに重なって配置されるため、表示されるのは最後に追加したものだけです。forループのいくつかの変更を次に示します。

RelativeLayout relate; relate = (RelativeLayout)findViewById(R.id.relative);
for (int i = 0; i < adapt_obj.city_name_array.length; i++){
    Button b1 = new Button(myref);
    b1.setId(100 + i);
    b1.setText(adapt_obj.city_name_array[i]);
    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    if (i > 0) {
        lp.addRule(RelativeLayout.BELOW, b1.getId() - 1);
    }   
    b1.setLayoutParams(lp);
    relate.addView(b1);
}
于 2012-04-13T08:20:01.253 に答える
0

Android では x と y の値を指定してはいけません。項目の左上にボタンを追加できます。また、wrap_content または fill_parent を使用する必要があるレイアウト パラメータ。

    Button button = new Button(this);
    button.setText(@"text");
    button.setLayoutParams(new LayoutParams(WRAP_CONTENT,WRAP_CONTENT));
    layout.addView(button);
于 2012-04-13T08:19:30.710 に答える
0

問題は相対的なレイアウトにあると思います。ボタンが重なり合っている可能性があります。親を線形レイアウトにしてみてください。

于 2012-04-13T08:19:40.227 に答える