Tôi có một đoạn mã đơn giản để triển khai listview tùy chỉnh.Hoạt động của setTag và getTag trong mẫu ViewHolder là gì?
Mã của tôi là như sau:
WeatherAdapter.java:
public class WeatherAdapter extends ArrayAdapter<weather>{
Context mcontext;
int mlayoutResourceId;
weather mdata[] = null;
View row;
public WeatherAdapter(Context context, int layoutResourceId, weather[] data) {
super(context, layoutResourceId, data);
mlayoutResourceId = layoutResourceId;
mcontext = context;
mdata = data;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
row = convertView;
WeatherHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity) mcontext).getLayoutInflater();
row = inflater.inflate(mlayoutResourceId, parent, false);
holder = new WeatherHolder(row);
row.setTag(holder);
}
else
{
holder = (WeatherHolder)row.getTag();
}
weather w = mdata[position];
holder.txtTitle.setText(w.mtitle);
holder.imgIcon.setImageResource(w.micon);
return row;
}
WeatherHolder.java:
class WeatherHolder
{
ImageView imgIcon;
TextView txtTitle;
public WeatherHolder(View v){
imgIcon = (ImageView)row.findViewById(R.id.imgIcon);
txtTitle = (TextView)row.findViewById(R.id.txtTitle);
}
}
}
Tôi đã thấy câu trả lời rất nhiều trên SO và khác các trang web và tôi hiểu cơ chế tái chế của listview.
Tôi cũng hiểu rằng từ người xem, chúng tôi có thể giữ chế độ xem con trong bộ điều hợp và chúng tôi không phải gọi số findViewById()
nhiều lần. Vì vậy, nó là để tối ưu hóa.
Nhưng tôi chỉ có sự nhầm lẫn trong các phương thức setTag(holder)
và getTag()
. From this question, tôi biết rằng để tạo cặp khóa-giá trị trên nhiều đối tượng, để chúng tôi có thể truy cập chúng dễ dàng. Nhưng, tôi không hiểu tại sao họ được yêu cầu ở đây ... bởi vì, chúng tôi không có nhiều đối tượng giữ ... chỉ chúng tôi phải thay đổi các biến của chủ sở hữu mỗi lần. chúng ta có thể viết mã ở đây mà không cần sử dụng setTag
và getTag
?
ai cũng có thể giải thích rõ hơn rằng những gì setTag
và getTag
làm "ở đây"?
xin vui lòng không đánh dấu là trùng lặp ... Tôi đã thấy rất nhiều câu trả lời nhưng không thể tìm thấy quyền cho tình huống cụ thể. – xyz
tại sao không thử nó theo cách của bạn và xem kết quả là gì? – panini
Tôi đã thử ... Tôi chưa đặt câu hỏi mà không có bất kỳ thử .. Nếu bạn biết, sau đó xin vui lòng cho câu trả lời – xyz