从ListView适配器中获取TextView内部的String

时间:2013-06-17 23:18:49

标签: android android-listview android-adapter

这是我的方法:

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

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

2 个答案:

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