1

这是我的一个方法:

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是动态的,并且在列表的每一行中都有各种值。所以不知道为什么它会返回这个。我的代码错了吗?

另请注意,行的位置是正确的;它将文本设置为正确的列表行,只是错误的值。

4

2 回答 2

1

问题很可能是由于:

listView.getAdapter().getView(position, view, listView); 

称呼。ListView当您直接从with获取行视图时getChildAt(),它通常具有您看到/想要的所有值,因此getView()不需要调用。

于 2013-06-18T15:23:19.303 回答
0

我不确定以下是否可以解决您的问题,但使用 aTag会更容易处理。我会用这个替换您的代码,以将总数保留在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);
}
于 2013-06-18T00:52:28.877 回答