2013-06-14 1 views
1

У меня есть ListView, у которого есть EditText в каждой строке. Пользователь может обновить значение, которое заполняется в EditText, а затем нажать кнопку, чтобы обновить новую сумму в верхней части ListView. Мой подход заключается в том, чтобы перебирать все записи ListView и получать значение EditText, выполнять необходимые вычисления, а затем обновлять интерфейс. Моя проблема заключается в том, что я продолжаю получать исключение NullPointerException на моей пятой итерации, хотя определенно значение заполнено. Он отлично работает для первых четырех итераций. Является ли мой код правильно и/или я должен принимать другой подход к тому, что я пытаюсь сделать:Android - Получите сумму значений EditText в элементе ListView при нажатии кнопки

button_finish.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      double sumOfAppliedAmounts = 0; 
      Bundle extras = getIntent().getExtras(); 
      double exchange_rate = Double.parseDouble(extras.getString("exchange_rate"))/100; 
      double convertedPaymentAmount; 

      if (exchange_rate >= 1) 
       convertedPaymentAmount = Double.parseDouble(extras.getString("payment_amount"))/exchange_rate; 
      else 
       convertedPaymentAmount = Double.parseDouble(extras.getString("payment_amount")) * exchange_rate; 

      for (int i = 0; i < (m_listview.getCount()); i++) { 
       v = m_listview.getChildAt(i); 
       applied_amount = (EditText) v.findViewById(R.id.list_text_applied_amount_value); 
       sumOfAppliedAmounts = sumOfAppliedAmounts + Double.parseDouble(applied_amount.getText().toString()); 
      } 

      text_remaining_converted_amount.setText(String.valueOf(convertedPaymentAmount - sumOfAppliedAmounts)); 
     } 
    }); 

ответ

0

Я не уверен, если это проблема или если вы знаете о процедурах ListView но Метод getChild() возвращает значения, которые относятся к позиции вида, как показано на экране, а не по всей позиции относительно всего адаптера. Я подозреваю, что на вашем экране отображается меньше просмотров, чем общее, и именно поэтому вы получаете нулевой указатель.

Это сообщение может быть такой же вопрос, как ваша:

android ListView mListView.getChildAt(i) is null, how to solve it?

надеюсь, что это помогает.

+0

Спасибо, что привело меня в правильном направлении. Я не знал, что вы не можете перебирать ВСЕ элементы ListView (видимые или нет). Я выполнил этот процесс на уровне адаптера, и он работает хорошо. – bgeveritt

+0

Рад, что это помогло. Я обнаружил, что в некоторых ситуациях некоторые оптимизации пользовательского интерфейса, которые делает Android, могут быть головной болью. – Scott

0

Try ниже код: -

View v1=m_listview.getChildAt(m_listview.getPositionForView(v)-m_listview.getFirstVisiblePosition()); 

где v is View из onClick().

Надеюсь, это может вам помочь.

1
Listview lv = (ListView) findViewById(R.id.previewlist); 

    final BaseAdapter adapter = new PreviewAdapter(this, name, age); 

    confirm.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 


      View view = null; 

      String value; 
      for (int i = 0; i < adapter.getCount(); i++) { 

       view = adapter.getView(i, view, lv); 

       Textview et = (TextView) view.findViewById(R.id.passfare); 


       value=et.getText().toString(); 

       Toast.makeText(getApplicationContext(), value, 
       Toast.LENGTH_SHORT).show(); 
      } 



     } 
    }); 
+0

вы можете обратиться к каждому ребенку списка, используя метод getview для адаптера – arjun

+1

Было бы лучше, если вы отразите эти изменения в своем разделе ответа. :) – surajsn

Смежные вопросы