在Android中滚动时出现第二种类型的项目,不同项目列表视图示例
问题描述:
我想为7th, 14th, 21th
位置添加新的imageview
项目。在Android中滚动时出现第二种类型的项目,不同项目列表视图示例
当我添加新项目并为其创建新的布局类型时,它不能很好地工作。
当滚动批次imageview
(类型2)项目出现在不同的位置。
我该如何解决这个问题,是我的错误?
(我只是尝试了第七的位置在这个代码来解决问题的滚动)
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;
}
}
答
我相信您有任何问题的原因是,你有没有意识到ListView正在回收它的意见。看起来你正在使用2个不同的视图,取决于视图是否在位置7 - 因此你基本上使用了2种不同类型的视图。问题在于ListView不知道这一点,所以你在5号位置创建的视图可能会在滚动后结束于7号位置。这是作为convertView参数传入的。
我敢打赌,你会得到很多在LogCat中打印的堆栈跟踪 - 一个非常重要的细节。
围绕它最简单的方法是检查你得到什么样的观点为convertView:
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 - 涵盖你提到的所有案例。
非常感谢您,YOU ROCK。这工作:) –