2012-08-11 61 views
0

我有一个约20项目的列表视图。每行适配器都有一个图像按钮,当我点击它时会执行不同的操作。当我点击列表视图的项目时,我设法正确地获取位置编号。但是当我点击图像按钮时,我得到的位置是错误的。而不是0〜19,但它显示0 1 2 3 0 1 2 3 0 1 2 3 .....Android的listview postition序列错误

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    ViewHolder holder;   

    if (convertView == null) { 
     convertView  = myInflater.inflate(R.layout.list_video, null); 
     holder   = new ViewHolder(); 

     holder.rlContainer  = (RelativeLayout) convertView.findViewById(R.id.rlContainer); 
     holder.imageView  = (ImageView)  convertView.findViewById(R.id.ivLogo); 
     holder.buttonBackground = (ImageView)  convertView.findViewById(R.id.ibButtonLebih); 
     holder.tvtitle   = (TextView)  convertView.findViewById(R.id.tvTitle); 

     holder.buttonBackground.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) {    
       videoListClickListener.OnVideoMoreClickListener(position); 
      } 
     }); 

     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 


    return convertView; 
} 
+0

你应该把setTag的if/else语句 看到http://stackoverflow.com/a/5197476/661079 – 2012-08-11 02:06:00

+0

感谢肯尼之外!问题解决了! – Jason 2012-08-11 02:32:04

回答

1

问题解决!通过将onclicklistener和setTag移动到if/else之外。

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
ViewHolder holder;   

if (convertView == null) { 
    convertView  = myInflater.inflate(R.layout.list_video, null); 
    holder   = new ViewHolder(); 

    holder.rlContainer  = (RelativeLayout) convertView.findViewById(R.id.rlContainer); 
    holder.imageView  = (ImageView)  convertView.findViewById(R.id.ivLogo); 
    holder.buttonBackground = (ImageView)  convertView.findViewById(R.id.ibButtonLebih); 
    holder.tvtitle   = (TextView)  convertView.findViewById(R.id.tvTitle); 

} else { 
    holder = (ViewHolder) convertView.getTag(); 
} 

holder.buttonBackground.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) {    
      videoListClickListener.OnVideoMoreClickListener(position); 
     } 
    }); 

    convertView.setTag(holder); 


return convertView; 

}