1

我有一个 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));
        }
    });
4

3 回答 3

0

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

这篇文章可能与您的问题相同:

android ListView mListView.getChildAt(i) 为空,如何解决?

希望这可以帮助。

于 2013-06-14T05:17:30.547 回答
0

试试下面的代码: -

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

在哪里v is ViewonClick()

希望它可以帮助你。

于 2013-06-22T06:49:37.050 回答
0
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();
            }



        }
    });
于 2016-03-26T10:26:13.473 回答