16

バックエンドから利用できるものに応じて、5 ~ 15 個のボタンを持つアプリケーションがあります。適切な GridView レイアウト ファイルを定義して、それぞれ異なるテキストやその他の属性を持つボタンの配列を含めるにはどうすればよいですか? 各ボタンは基本的に商品をカートに追加するため、カートに商品を追加することを除いて onClick コードは同じです。

可変数のボタンを追加できるように配列を定義する方法はありますが、一意の ID で各ボタンを参照できますか? arrays.xmlの例を見てきましたが、事前に設定された文字列の配列が作成されています。オブジェクトを作成する方法が必要ですが、レイアウトまたは配列の xml ファイルでテキストが定義されていません。

更新 - GridView への追加に関する情報を追加しました

これを GridView に追加したいので、[addView メソッド]( http://developer.android.com/reference/android/widget/AdapterView.html#addView(android.view.View,%20int)を呼び出すと、 UnsupportedOperationException. 次のことができます。

ImageButton b2 = new ImageButton(getApplicationContext());
b2.setBackgroundResource(R.drawable.img_3);
android.widget.LinearLayout container = (android.widget.LinearLayout) findViewById(R.id.lay);
container.addView(b2);

しかし、それは私が望むようにボタンをグリッドにレイアウトしません。これは GridView で実行できますか?

4

3 に答える 3

23

for次のコードでは、変数 の上限を変更する必要があります。

public class MainActivity
        extends Activity
        implements View.OnClickListener {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        TableLayout layout = new TableLayout (this);
        layout.setLayoutParams( new TableLayout.LayoutParams(4,5) );

        layout.setPadding(1,1,1,1);

        for (int f=0; f<=13; f++) {
            TableRow tr = new TableRow(this);
            for (int c=0; c<=9; c++) {
                Button b = new Button (this);
                b.setText(""+f+c);
                b.setTextSize(10.0f);
                b.setTextColor(Color.rgb( 100, 200, 200));
                b.setOnClickListener(this);
                tr.addView(b, 30,30);
            } // for
            layout.addView(tr);
        } // for

        super.setContentView(layout);
    } // ()

    public void onClick(View view) {
        ((Button) view).setText("*");
        ((Button) view).setEnabled(false);
    }
} // class
于 2010-05-22T21:31:13.533 に答える
14

ここにあなたのための素晴らしいサンプルがあります:

https://developer.android.com/guide/topics/ui/layout/gridview.html

getView アダプター メソッドでイメージビューの代わりにボタンを作成するだけです。

于 2009-05-05T09:10:02.597 に答える
9

GridViewまたはListView (etc)を使用していて、アダプターgetView(pos, convertView, viewGroup)を介してビューを作成してビューを作成している場合、混乱が生じる可能性があります (私は一度やったことがあります)。

convertView パラメーターを再利用することにした場合は、その内部のすべてをリセットする必要があります。レイアウトを膨らませるコストを節約するために、フレームワークによって渡される古いビューです。以前のレイアウトの位置に関連付けられることはほとんどありません。

class GridAdapter extends BaseAdapter // assigned to your GridView
{
    public View getView(int position, View convertView, ViewGroup arg2) {
        View view;
        if (convertView==null)
        {
            view = getLayoutInflater().inflate(R.layout.gd_grid_cell, null);
        }
        else
        {
             // reusing this view saves inflate cost
             // but you really have to restore everything within it to the state you want
            view = convertView;
        }


        return view;
    }
    //  other methods omitted (e.g. getCount, etc) 
}

これは、最初は概念を理解するのが少し難しい Android のものの 1 つを表していると思いますが、その中で利用可能な重要な最適化があることに気付くまで (小さなモバイル デバイスの CPU に優しくする必要があります)。

于 2010-04-24T01:10:05.770 に答える