0

次のような状況があります。

アプリが起動すると、ユーザーが必要なチケットの数を言うことができるプロンプト ダイアログが表示されます。3 と入力すると、チケットの説明と価格を入力できる別のダイアログが表示されます。

その部分は機能しますが、eventlistener を numberpicker に追加したい場合は、+ または - をクリックするとチケットの適切な価格が計算されます。

ここに画像の説明を入力

画像でわかるように、動的に追加される 5 つのテキストビューと 1 つの数値ピッカーがあります。

私は次のことを試しましたが、うまくいきません:

for (int i = 0; i < differentTickets; i++){
        final int j = i;
        NumberPicker np = (NumberPicker) findViewById(j+10);
        np.setOnNumberPickerChangedListener(new NumberPicker.OnNumberPickerChangedListener() {
            @Override
            public void onNumberPickerChanged(NumberPicker mynumberpicker) {
                TextView tv = (TextView) findViewById(j+100);
                tv.setText("test");

            }
        });
    }

これは、ビューを動的に追加する方法のコードです。

for (int i = 0; i < differentTickets; i++) {
                                ticket t = new ticket();
                                t.setOmschrijving(omschrijvingenLijst
                                        .get(i).getText().toString());
                                t.setPrijs(Double.parseDouble(prijzenLijst
                                        .get(i).getText().toString()));
                                ticketten.add(t);

                                LinearLayout llTicketsH = new LinearLayout(
                                        MainActivity.this);
                                llTicketsH
                                        .setOrientation(LinearLayout.HORIZONTAL);

                                TextView tvv = new TextView(
                                        MainActivity.this);
                                tvv.setText(omschrijvingenLijst.get(i)
                                        .getText().toString());
                                tvv.setTextColor(Color.BLACK);
                                tvv.setTextSize(
                                        TypedValue.COMPLEX_UNIT_DIP, 30);
                                tvv.setWidth((int) convertDpToPixel(400,
                                        MainActivity.this));

                                llTicketsH.addView(tvv);

                                TextView tvPrijs = new TextView(
                                        MainActivity.this);
                                tvPrijs.setText(prijzenLijst.get(i)
                                        .getText().toString());
                                tvPrijs.setTextColor(Color.BLACK);
                                tvPrijs.setTextSize(
                                        TypedValue.COMPLEX_UNIT_DIP, 30);
                                tvPrijs.setWidth((int) convertDpToPixel(
                                        100, MainActivity.this));
                                tvPrijs.setGravity(Gravity.RIGHT);
                                tvPrijs.setId(i);
                                llTicketsH.addView(tvPrijs);

                                TextView tvEuro2 = new TextView(
                                        MainActivity.this);
                                tvEuro2.setText(" €");
                                tvEuro2.setTextColor(Color.BLACK);
                                tvEuro2.setTextSize(
                                        TypedValue.COMPLEX_UNIT_DIP, 30);
                                tvEuro2.setWidth((int) convertDpToPixel(50,
                                        MainActivity.this));
                                llTicketsH.addView(tvEuro2);

                                NumberPicker np = new NumberPicker(
                                        MainActivity.this, null);
                                np.setId(i+10);
                                llTicketsH.addView(np);

                                TextView tvPrijsTot = new TextView(
                                        MainActivity.this);
                                tvPrijsTot.setText("xxx");
                                tvPrijsTot.setTextColor(Color.BLACK);
                                tvPrijsTot.setTextSize(
                                        TypedValue.COMPLEX_UNIT_DIP, 30);
                                tvPrijsTot.setWidth((int) convertDpToPixel(
                                        100, MainActivity.this));
                                tvPrijsTot.setGravity(Gravity.RIGHT);
                                tvPrijsTot.setId(i+100);
                                llTicketsH.addView(tvPrijsTot);

                                TextView tvEuro = new TextView(
                                        MainActivity.this);
                                tvEuro.setText(" €");
                                tvEuro.setTextColor(Color.BLACK);
                                tvEuro.setTextSize(
                                        TypedValue.COMPLEX_UNIT_DIP, 30);
                                LinearLayout.LayoutParams MOs = new LinearLayout.LayoutParams(
                                        LayoutParams.MATCH_PARENT,
                                        LayoutParams.WRAP_CONTENT);
                                tvEuro.setLayoutParams(MOs);
                                llTicketsH.addView(tvEuro);

                                llTickets.addView(llTicketsH);

                            }

                        }
                    });
4

1 に答える 1

0

あなたができることはgetParent...NumberPicker次に、そのparentViewでchildPosition、そのビューでtextViewを取得して、要件に従って更新します...

このような..

for (int i = 0; i < differentTickets; i++){
        final int j = i;
        NumberPicker np = (NumberPicker) findViewById(j+10);
        np.setOnNumberPickerChangedListener(new NumberPicker.OnNumberPickerChangedListener() {
            @Override
            public void onNumberPickerChanged(NumberPicker mynumberpicker) {
                //TextView tv = (TextView) findViewById(j+100);
                LinearLayout parView = (LinearLayout) mynumberpicker.getParent();
                TextView tv = parView.getChildAt(5);//your child view at position
                tv.setText("test");

            }
        });
    }
于 2013-06-01T15:22:28.173 に答える