0

我正在使用ArrayAdapter来显示项目在我的列表视图,但是当我滚动项目的顺序更改,我想pb是在getView方法,我试图添加一个viewHolder解决这一点,但什么都没有改变,我仍然列表视图混合起来listview android值在滚动中混合

这里我的适配器:

public class AdpaterFeed extends ArrayAdapter<String> { 
    String[] data; 
    int layoutResourceId; 
    Helper helper; 

    public AdpaterFeed(Context context, int layoutResourceId, String[] data) { 
     super(context, layoutResourceId, data); 
     this.layoutResourceId = layoutResourceId; 
     this.data = data; 
     this.helper = Helper.getInstance(); 

    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder viewHolder; 
     if (convertView == null) { 
      LayoutInflater vi = (LayoutInflater) getContext().getSystemService(
        Context.LAYOUT_INFLATER_SERVICE); 
      convertView = vi.inflate(layoutResourceId, parent, false); 
      viewHolder = new ViewHolder(); 
      viewHolder.txt =(TextView) convertView.findViewById(R.id.text3); 
      viewHolder.webview = (WebView) convertView.findViewById(R.id.webview); 
      convertView.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
     } 
     if (getItem(position) != null) { 

      if (getItem(position).contains("<img")) { 

       viewHolder.webview.loadData(helper.rss[position], "text/html", "UTF-8"); 

      } else { 

       viewHolder.txt.setText(Html.fromHtml(helper.title[position])); 
       viewHolder.webview.loadData(helper.rss[position], "text/html", "UTF-8"); 
      } 
     } 

     return convertView; 
    } 

    public static class ViewHolder { 
     TextView txt; 
     WebView webview; 

    } 

} 

不要任何人都可以帮我吗?

+0

你能后的''代码'getItem'''方法?你是否更改适配器使用的集合? – 2015-02-05 15:46:26

+0

@KirilAleksandrov @KirilAleksandrov我没有实现getItem方法,它是你可以在适配器上使用的方法 – user50000 2015-02-05 15:50:42

+0

不相关,但为了正确解释你的XML'layoutResourceId'中的'layout_params',你应该使用父类型的膨胀方法: inflate(layoutResourceId,parent,false)' – Joffrey 2015-02-05 16:01:46

回答

0

使用如下样品写成的观点持有者概念...

@覆盖 公共查看getView(INT位置,查看convertView,ViewGroup以及母公司){

ViewHolder viewHolder; 

    if (convertView == null) { 

     convertView = mInflater.inflate(R.layout.row_layout, null); 

     TextView programName = (TextView)convertView.findViewById(R.id.programName); 
     TextView programTime = (TextView)convertView.findViewById(R.id.programTime); 
     TextView programState = (TextView)convertView.findViewById(R.id.programState); 
     ImageView programImage =(ImageView)convertView.findViewById(R.id.programImage); 



     viewHolder = new ViewHolder(); 
     viewHolder.p_Name = programName; 
     viewHolder.p_Time = programTime; 
     viewHolder.p_State = programState; 
     viewHolder.p_Image = programImage; 

     convertView.setTag(viewHolder); 

    }else{ 

     viewHolder = (ViewHolder) convertView.getTag(); 
    } 

    viewHolder.p_Name.setText(values.programNames.get(position)); 
    viewHolder.p_Time.setText(values.programTimes.get(position)); 
    new imageDownload(programImage).execute(values.programImageUrls.get(position)); 


    return convertView; 
} 

和视图holder类像这样

public static class ViewHolder { 
TextView p_Name; 
TextView p_Time; 
TextView p_State; 
ImageView p_Image; 

}

希望ŧ他会帮助你。

+0

谢谢,但它不适用于我:/ – user50000 2015-02-05 16:27:26

1

更新:在评论中的OP精度,我相信问题来自webviews加载的方式。也许你应该找到一种方法来控制AsyncTasks的加载,并确保你将正确的视图匹配到正确的内容。


也许您的问题就在于,你不擦除的第一部分文字,如果:

if (getItem(position).contains("<img")) { 
    viewHolder.text.setVisibility(View.GONE); // maybe you want this here? 
    viewHolder.webview.loadData(getItem(position), "text/html", "UTF-8"); 
} else { 
    viewHolder.text.setVisibility(View.VISIBLE); // and compensate here 
    viewHolder.text.setText(Html.fromHtml(helper.title[position])); 
    viewHolder.webview.loadData(getItem(position), "text/html", "UTF-8"); 
} 

如果您有不同类型的项目(文本或图像),也许你应该看看适配器中的视图类型。这是一个非常重要的功能,可以为不同类型的视图提供不同的布局。


UNRELATED: 关于此代码:

TextView text = (TextView) convertView.findViewById(R.id.text3); 
WebView wv = (WebView) convertView.findViewById(R.id.webview); 

viewHolder = new ViewHolder(); 
viewHolder.txt = text; 
viewHolder.webview = wv; 

我觉得清洁剂(绝对短)跳过局部变量:

viewHolder = new ViewHolder(); 
viewHolder.txt = (TextView) convertView.findViewById(R.id.text3); 
viewHolder.webview = (WebView) convertView.findViewById(R.id.webview); 
+0

看看我用新的适配器更新我的问题 – user50000 2015-02-05 16:34:59

+0

你究竟混淆了什么意思?为什么不为有图像的元素设置文本?如果您不覆盖该文本,则会保留前一个文本(在滚动浏览视图之前的文本)。 – Joffrey 2015-02-05 16:41:51

+0

即时通讯使用webview而不是textView的图像,因为我的IMG他们不能加载只能在web视图中,他们是HTML5 img。并混淆了我的意思是当我以随机方式滚动行更改的内容 – user50000 2015-02-05 17:03:40