这是我的方法:
public static void updateRowForReview(int itemRowPosition) {
adapter.getWasReviewed(itemRowPosition);
updateReviewAtPosition(itemRowPosition);
}
private static void updateReviewAtPosition(int position) {
View view = listView.getChildAt(position - listView.getFirstVisiblePosition());
listView.getAdapter().getView(position, view, listView);
TextView reviewTotalTV =(TextView) view.findViewById(R.id.tvReviewTotalForItem);
String reviewTotal = reviewTotalTV.getText().toString();
int reviewTotalInt = Integer.valueOf(reviewTotal) + 1;
reviewTotalTV.setText(String.valueOf(reviewTotalInt));
}
无论我做什么,getText().toString()
只返回1. TextView
tvReviewTotalForItem
是动态的,并且在列表的每一行中都有各种值。所以不确定为什么它会返回这个。我的代码错了吗?
另请注意,行的位置是正确的;它将文本设置为右侧列表行,只是错误的值。
答案 0 :(得分:1)
问题很可能是由于:
listView.getAdapter().getView(position, view, listView);
呼叫。当您使用ListView
直接从getChildAt()
获取行视图时,它通常会包含您看到/想要的所有值,因此getView()
调用是不必要的。< / p>
答案 1 :(得分:0)
我不确定以下内容是否可以解决您的问题,但使用Tag
可以更轻松地解决问题。我会用这个替换你的代码,以保持Tag
附加TextView
的总数:
private static void updateReviewAtPosition(int position) {
View view = listView.getChildAt(position - listView.getFirstVisiblePosition());
listView.getAdapter().getView(position, view, listView);
TextView reviewTotalTV =(TextView) view.findViewById(R.id.tvReviewTotalForItem);
int reviewTotal = 0;
if(reviewTotalTV.getTag() != null){
reviewTotal = (Integer) reviewTotalTV.getTag();
}
reviewTotal++;
reviewTotalTV.setText(String.valueOf(reviewTotal));
reviewTotalTV.setTag(reviewTotal);
}