【发布时间】:2014-03-22 11:21:39
【问题描述】:
我已经尝试了所有基本的事情,比如将每个繁重的任务转移到异步任务,在 getview() 中使用缓存的视图引用,启用滚动/绘图缓存等,所以请不要推荐它们。我已经确定了使用 ArrayList 的问题。
我正在使用带有 Hashmap 的 ArrayList 来保存数据。
static ArrayList<HashMap<String, String>> mainList = new ArrayList<HashMap<String, String>>();
适配器代码:
public static class LazyAdapter extends BaseAdapter {
private Activity activity;
private ArrayList<HashMap<String, String>> data;
private LayoutInflater inflater = null;
public ImageLoader imageLoader;
public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
activity = a;
data = d;
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader = new ImageLoader(activity.getApplicationContext());
}
public int getCount() {
return data.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
View vi = convertView;
if (convertView == null) {
vi = inflater.inflate(R.layout.list_row, null);
holder = new ViewHolder();
holder.title = (TextView) vi.findViewById(R.id.title);
holder.artist = (TextView) vi.findViewById(R.id.artist);
holder.duration = (TextView) vi.findViewById(R.id.duration);
holder.newsid = (TextView) vi.findViewById(R.id.newsid);
holder.thumb_image = (ImageView) vi
.findViewById(R.id.list_image);
vi.setTag(holder);
} else {
holder = (ViewHolder) vi.getTag();
}
HashMap<String, String> song = new HashMap<String, String>();
try {
song = data.get(position);
// Setting all values in listview
if (song.get(MainActivity.TAG_SELECTED)
.equalsIgnoreCase("true")) {
final CheckBox chk = (CheckBox) vi.findViewById(R.id.tick);
chk.setChecked(false);
} else {
final CheckBox chk = (CheckBox) vi.findViewById(R.id.tick);
chk.setChecked(true);
}
holder.newsid.setText(song.get(MainActivity.TAG_ID));
holder.title.setText(song.get(MainActivity.TAG_TITLE));
holder.title.setTypeface(myTypeface);
holder.title.setTextSize(16);
holder.artist.setText(song.get(MainActivity.TAG_DESCRIPTON));
holder.artist.setTypeface(myTypeface);
holder.artist.setTextSize(13);
holder.duration.setText(song.get(MainActivity.TAG_CREATED));
holder.duration.setTextSize(12);
imageLoader.DisplayImage(song.get(MainActivity.TAG_IMAGE),
holder.thumb_image);
} catch (Exception e) {
}
return vi;
}
}
我怎样才能做到这一点?
【问题讨论】:
-
那你遇到了什么问题
-
能贴出适配器的代码吗?
-
@rajshree 列表视图在滚动时非常缓慢且生涩。不流畅。
-
对于每个视图,上面的细节都是相同的,然后放在 viewHolder 类中,这样它就会设置一次..
-
你在使用 View holder 模式吗???
标签: android listview arraylist hashmap