我有一个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));
}
});
答案 0 :(得分: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();
}
}
});
答案 1 :(得分:0)
我不确定这是否是问题,或者您是否知道ListView过程,但getChild()方法返回的值相对于屏幕上显示的视图位置,而不是相对于整个适配器。我怀疑你的屏幕显示的视图少于总数,这就是为什么你得到一个空指针。
这篇文章可能与您的问题相同:
android ListView mListView.getChildAt(i) is null, how to solve it?
希望这会有所帮助。
答案 2 :(得分:0)
请尝试以下代码: -
View v1=m_listview.getChildAt(m_listview.getPositionForView(v)-m_listview.getFirstVisiblePosition());
v is View
的{{1}}。
希望它可以帮助你。