我想为imageview
位置添加新的7th, 14th, 21th
项。
当我添加新项目并为其创建新的布局类型时,它无效。
当滚动大量imageview
(type2)项目出现在不同位置时。
我如何解决这个问题,而这是我的错误?
(我在此代码中只尝试了第七个位置来解决滚动问题。)
public class MyAdapter extends BaseAdapter{
MyFragmentManager mFragmentManager;
List<Tier3Category>list;
Context context;
ListView myList;
OneriDetail myObj;
Tier3Category obj;
public MyAdapter(Context context, List<Tier3Category> list, MyFragmentManager mFragmentManager,
ListView myList, int type) {
super();
this.mFragmentManager = mFragmentManager;
this.list = list;
if(list.size()>1)
list.add(7,new Tier3Category("", "", "", "", "", "", "", "", "", "", "", "", "", false, false, false, "", "", "", ""));
Log.w("", list.size()+"asd");
this.context = context;
this.myList = myList;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Tier3Category getItem(int position) {
if (getCount()>0){
return list.get(position);
}
else{
return null;
}
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final ViewHolder1 vh ;
final ViewHolder2 vh2;
if(position!=7){
try {
if (convertView==null){
vh = new ViewHolder1();
convertView = LayoutInflater.from(context).inflate(
R.layout.adapter_oneri_list, parent, false);
vh.title = (TextView) convertView.findViewById(R.id.list_title);
convertView.setTag(vh);
}
else{
vh = (ViewHolder1)convertView.getTag();
}
convertView.setTag(vh);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else {
try {
if (convertView==null){
vh2 = new ViewHolder2();
convertView = LayoutInflater.from(context).inflate(R.layout.adapter_adv_item, parent,false);
vh2.adv_photo = (ImageView) convertView.findViewById(R.id.adv_image);
convertView.setTag(vh2);
}
else{
vh2 = (ViewHolder2)convertView.getTag();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return convertView;
}
public class ViewHolder1{
TextView comment_count , like_count , follow_count , username , time , title , content, location , categoryname;
RoundedImageView sugg_photo;
RoundedImageView user_photo;
RelativeLayout threedot;
ImageView likeIcon , commentIcon , followIcon;
}
public class ViewHolder2{
ImageView adv_photo;
}
}
答案 0 :(得分:1)
我相信您遇到问题的原因是您还没有意识到ListView正在回收它的观点。根据视图是否位于第7位,您似乎使用了2个不同的视图 - 因此您实际上使用的是2种不同类型的视图。问题是ListView不知道这一点,因此您在位置5创建的视图可能在滚动后最终位于第7位。这是作为convertView参数传递的。
我愿意打赌你在LogCat中打印了大量的堆栈痕迹 - 这是一个非常重要的细节。
最简单的方法是检查你转换后的视图类型:
if(position!=7){
try {
if (convertView==null || convertView.getTag() ! instanceof ViewHolder1){
和
else {
try {
if (convertView==null || convertView.getTag() ! instanceof ViewHolder2){
我建议你做的另一件事是停止检查位置7,而是做:
if (position % 7 != 0)
这将检查位置是否为7的倍数 - 涵盖您提到的所有案例。