如何根据位置更改持有人内部的视图属性? 这个问题只有在使用回收时才会出现 有数据持有者类。我可以根据位置为每个不同的文本视图设置不同的标题,但我无法根据位置更改每个文本视图的文本大小。
当然使用recycleView = false它可以正常工作,因为视图不会被回收,但如何使它与Recycler一起使用?
boolean recycleView = false;
ArrayList<SocialItem> list;
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null || !recycleView) {
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
convertView = mInflater.inflate(R.layout.social_list_item, null);
holder = new ViewHolder();
holder.title1 = (TextView) convertView.findViewById(R.id.si_title1);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.title1.setText(list.get(position).getTitle1());
//changes textsize of textview to fit in specific width, and saves in our holder list, and sets from it in textview
list.get(position).setTxtSize1(Util.correctTVWidth(holder.title1, 110));
holder.title1.setTextSize(TypedValue.COMPLEX_UNIT_PX, list.get(position).getTxtSize1());
return convertView;
}
Kingfisher Phuoc 的解决方案有效,但为什么以下代码无法正常工作? 我认为它的作用是,它根据位置将计算的文本大小保存在一个简单的pojo持有者中,并在视图中设置文本化,不应该有效吗?
//changes textsize of textview to fit in specific width, and saves in our holder list, and sets from it in textview
list.get(position).setTxtSize1(Util.correctTVWidth(holder.title1, 110));
holder.title1.setTextSize(TypedValue.COMPLEX_UNIT_PX, list.get(position).getTxtSize1());
答案 0 :(得分:1)
如果我不误解,你需要在特定的位置改变观点,对吗?如果这是你想要的,你可以做到。为什么不?请看下面的例子:
if(position == somePositionYouWant){ // change textsize at specific position
holder.yourTextView.setTextSize(yourtextSize);
}else{
// you must reset your textsize in other position or everything will be mess
holder.yourTextView.setTextSize(defaultTextSize);
}
如果我没错,您可以使用Util.correctTVWidth(holder.title1, 110)
来计算textsize
。但是,您应该记住convertView
被重用。这意味着如果任何行不可见,它将被重用于下一个可见视图。例如,列表视图中的10个项目是可见的,当您向下滚动时,第11个项目将可见并重复使用第1个项目的视图,TextView
属性将保留在第1个项目中。如果您根据第11项第1项的holder.title1
计算文本大小,可能是您的代码不起作用的原因。