【问题标题】:Android - Get sum of EditText values in a ListView on button clickAndroid - 在按钮单击时获取 ListView 中的 EditText 值的总和
【发布时间】:2013-06-14 05:07:15
【问题描述】:

我有一个 ListView,每行都有一个 EditText。用户可以更新 EditText 中填充的值,然后单击按钮以刷新 ListView 顶部的新总和。我这里的方法是遍历所有 ListView 记录并获取 EditText 的值,执行必要的计算,然后更新 UI。我的问题是我在第五次迭代中不断收到 NullPointerException,即使肯定填充了一个值。它在前四次迭代中运行良好。我的代码是否正确和/或我应该对我正在尝试做的事情采取不同的方法:

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

【问题讨论】:

    标签: java android listview android-edittext


    【解决方案1】:

    我不确定这是否是问题所在,或者您是否知道 ListView 过程,但 getChild() 方法返回的值与屏幕上显示的视图位置相关,而不是相对于整个适配器。我怀疑您的屏幕显示的视图少于总视图,这就是您获得空指针的原因。

    这篇文章可能和你的问题相同:

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

    希望这会有所帮助。

    【讨论】:

    • 谢谢 - 这让我朝着正确的方向前进。我不知道你不能循环遍历 ListView 的所有项目(可见与否)。我已经在适配器层完成了这个过程,它运行良好。
    • 很高兴它有一些帮助。我发现在某些情况下,Android 所做的一些 UI 优化可能会让人头疼。
    【解决方案2】:

    试试下面的代码:-

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

    v is ViewonClick() 的位置。

    希望对你有帮助。

    【讨论】:

      【解决方案3】:
      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();
                  }
      
      
      
              }
          });
      

      【讨论】:

      • 你可以使用适配器的getview方法引用每个listview子
      • 如果您将这些更改反映到您的答案部分会更好。 :)
      猜你喜欢
      • 2012-05-19
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 2018-09-10
      • 1970-01-01
      • 2012-09-06
      • 2013-10-13
      • 1970-01-01
      相关资源
      最近更新 更多