2013-06-01 5 views
0

У меня следующая ситуация:установка onclicklistener к numberpicker dynammicaly добавили андроид

Когда приложение запуска я показывать быстрое диалоговое окно, в котором пользователь может сказать, сколько различных билеты они хотят. Если они заполняются в 3, появляется другое диалоговое окно, где они могут заполнить описание и цену билетов.

Эта часть работает, но когда я хочу добавить eventlistener к numberpicker, поэтому, когда они нажимают + или - он вычисляет правильную цену за билет.

enter image description here

Как и можно видеть на изображении, есть 5 TextViews и 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); 

          } 

         } 
        }); 

ответ

0

Что вы можете сделать, это getParent из NumberPicker ... Затем в этом parentView получите textView с childPosition в том, что View обновит согласно вашему требованию ...

Нравится это ..

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"); 

      } 
     }); 
    } 
Смежные вопросы