ListView项目更改滚动位置 [英] ListView Items change position on scroll

查看:63
本文介绍了ListView项目更改滚动位置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经实现了一个加载新闻的ListView,但是新闻在滚动列表时会改变位置.这是清单

I have Implemented a ListView which loads news, but news changes position when I scroll the list. this is list

public class ListNewsFragment extends SherlockListFragment{

private ListNewsAdapter mAdapter;

@Override
public void onCreate(Bundle savedInstanceState) {
    mAdapter = new ListNewsAdapter(this, app.getAllNews());
    setListAdapter(mAdapter);
    super.onCreate(savedInstanceState);
}
}


public class ListNewsAdapter extends BaseAdapter{
private List<News> news;
private Context mContext;
private LayoutInflater inflater;
private ViewHolder holder;

public ListNewsAdapter(final Fragment c, List<News> news) {
    super();
    this.news = news;
    this.mContext = c.getActivity();
    inflater = LayoutInflater.from(mContext);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View v = convertView;
    if (v == null) {               
         inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);         
         holder = new ViewHolder();
         v = inflater.inflate(R.layout.fragment_list_news, null);

         holder.name = (TextView) v.findViewById(R.id.tittle);
         holder.tweet = (TextView) v.findViewById(R.id.news);
         holder.avatar = (ImageView) v.findViewById(R.id.image);


         holder.name.setText(news.get(position).getTitulo());
         holder.tweet.setText(news.get(position).getCopete());
         new ImagefetcherTask(position).execute(holder);

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

}

private class ViewHolder{
    public TextView name, tweet;
    public ImageView avatar;
}

private class ImagefetcherTask extends AsyncTask<ViewHolder, Void, ViewHolder> {

        private Bitmap bitmap;
        int position; 

        public ImagefetcherTask(int position) {
            this.position = position;
        }

        @Override
        protected ViewHolder doInBackground(ViewHolder... params) {
             ViewHolder viewHolder = params[0];

            try{
                bitmap = BitmapFactory.decodeStream((InputStream) new URL("...."+ news.get(position).getImagen().toString()).getContent());
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

          return viewHolder;
        }

    @Override
    protected void onPostExecute(ViewHolder result) {
        // TODO Auto-generated method stub
        if (bitmap == null) {
            result.avatar.setImageResource(com.dev.suma_intranet_v1.R.drawable.img_perfil);
        } else {
            result.avatar.setImageBitmap(bitmap);
        }
    }

}

}

推荐答案

将您的getView()方法更改为此:

Map<Integer, View> views = new HashMap<Integer, View>;

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    if (views.containsKey(position)) {    
         return views.get(position);
    }

     inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);         
     holder = new ViewHolder();
     View v = inflater.inflate(R.layout.fragment_list_news, null);

     holder.name = (TextView) v.findViewById(R.id.tittle);
     holder.tweet = (TextView) v.findViewById(R.id.news);
     holder.avatar = (ImageView) v.findViewById(R.id.image);

     holder.name.setText(news.get(position).getTitulo());
     holder.tweet.setText(news.get(position).getCopete());
     new ImagefetcherTask(position).execute(holder);

     v.setTag(holder); 
     views.put(position, v);
     return v; 

}

这篇关于ListView项目更改滚动位置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆