ListView项目更改滚动位置 [英] ListView Items change position on scroll
本文介绍了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屋!
查看全文