0

各インフレータには、シークバーとテキストビューを持つ行があります。2 行目のシークバーにアクセスする方法がわかりません。seekOnChangeListener を作成しましたが、infalter の最後のシークバーにのみ適用されます。他の行のオブジェクトにアクセスするには?

            @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            int barChosen = seekBar.getId();
            // TODO Auto-generated method stub
            float changePerPersonTip = Float.parseFloat(tipTotal);
            changePerPersonTip  *= progress;
            changePerPersonTip  /= 100;
            changePerPersonTip = (float) (Math.round(changePerPersonTip * 100.0) / 100.0);
            String changeInPerPerson = Float.toString(changePerPersonTip);
            tipPerPerson.setText(changeInPerPerson);

        }
4

1 に答える 1

0

「各行」と言いましたが、リストビューまたはテーブルレイアウトのレイアウトから膨張しますか?

次のようなものがあります。

private class ViewHolderRowItem{
    SeekBar sb;
    TextView txt1;
    TextView txt2;///...etc
    View layout;///...a container if needed
}

アダプターの getView メソッド (リストビューなど) では、次のようにすることができます。

    public View getView(final int position, View convertView, ViewGroup parent) {

        ViewHolderRowItem holder;
        if (convertView == null) {
            convertView = getLayoutInflater().inflate(R.layout.data_row_item, parent, false);

            holder = new ViewHolderGridItem();
            holder.sb = (SeekBar) convertView.findViewById(R.id.sb);
            holder.txt1 = (TextView) convertView.findViewById(R.id.txt1);
            holder.txt2 = (TextView) convertView.findViewById(R.id.txt1);
        }
     }

TableLayout アプローチ (レイアウトの列と行を知っている) の場合、たとえば (3 列)、メソッドgetChildCount()およびgetChildAt()を使用して、テーブルの各セルを取得できます。

TableLayout tbL = (TableLayout) findViewById(R.id.tbL);
TableRow row1=(TableRow)tbL.getChildAt(0);
SeekBar sb1=(SeekBar) row1.getChildAt(0);
TextView txt1_1=(TextView) row1.getChildAt(1);
TextView txt1_2=(TextView) row1.getChildAt(2);
..etc

次のように、テーブルのさまざまな行を反復処理できます。

for(int i=0;i<tbL.getChildCount();++i){
 TableRow row= (TableRow) tbL.getChildAt(i);
 SeekBar sb=(SeekBar) row.getChildAt(0);
 TextView txt1=(TextView) row.getChildAt(1);
 TextView txt2=(TextView) row.getChildAt(2);
}
于 2013-09-30T00:32:27.540 に答える