2

開発中のアプリで問題が発生しています。開始スピナー (クライアントの選択) と要素が含まれる 1 行の画面があります。プラスボタンをクリックすると、それらの行がさらに追加されます。問題は、それらを XML レイアウト ファイルで追加しているため、ID を変更できない (または変更できますか?) ことです。だから私はそれらのそれぞれから値を取得することはできません.onItemSelectedはクライアントのスピナーでは機能しますが、他のスピナーでは機能しません. こちらの画面のスクリーンショットと、最初の行/他の行を作成するためのコード スニペットを取得しました。

スクリーンショット: http://dl.dropbox.com/u/9667835/Screenshot_2012-11-14-10-44-38.png

private void startRow()
{
    ArrayAdapter<String> adapterUnits = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item);
    for(int i=0; i<units_arr.size(); i++)
        adapterUnits.add(units_arr.get(i).get("name").toString());
    ArrayAdapter<String> adapterVats = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_dropdown_item);
    for(int i=0; i<vats_arr.size(); i++)
        adapterVats.add(vats_arr.get(i).get("value").toString());

    tl = (TableLayout) findViewById(R.id.add_invoice_layout);
    LayoutInflater inflater = LayoutInflater.from(this);
    View item = inflater.inflate(R.layout.add_invoice_row, tl, false);

    Spinner units = (Spinner) item.findViewById(R.id.spinnerUnit);
    Spinner vats = (Spinner) item.findViewById(R.id.spinnerVAT);
    units.setAdapter(adapterUnits);
    vats.setAdapter(adapterVats);
    tl.addView(item);
}
4

1 に答える 1

1

膨張した各ビューへの参照を保持し、完成した入力データを処理するときにそれらを繰り返します。

// View references, as a class property
private ArrayList<View> viewRef = new ArrayList<View>();

View item = inflater.inflate ...
this.viewRef.add(item);

さて、データを処理するときは、そのようにします。

for (View item : this.viewRef)

ID は一意であるはずなので、代わりにタグを使用する必要があります。findViewWithTagを参照してください

編集; ビューへの参照を手動で保存したくない場合は、親ビューの getChildCount() メソッドを使用してそれらを反復できます。

for (int i = 0; i < parent.getChildCount(); i++)
{
     View item = (View) parent.getChildAt(i);
}
于 2012-11-14T10:05:58.633 に答える