使用GridView时跳过android中的帧?
当我使用GridView并向GridView添加自定义布局时,我看到了这个错误,我的应用程序运行非常缓慢使用GridView时跳过android中的帧?,android,android-gridview,Android,Android Gridview,当我使用GridView并向GridView添加自定义布局时,我看到了这个错误,我的应用程序运行非常缓慢 02-28 18:39:59.252: I/Choreographer(5586): Skipped 263 frames! The application may be doing too much work on its main thread. 我的代码: public View getView(int position, View convertView, View
02-28 18:39:59.252: I/Choreographer(5586): Skipped 263 frames! The application may be doing too much work on its main thread.
我的代码:
public View getView(int position, View convertView, ViewGroup parent) {
View vi1=convertView;
if(convertView==null){
vi1 = inflater.inflate(R.layout.my_layout, null);
ImageView imv = (ImageView) vi1.findViewById(R.id.Image);
ImageView imv2 = (ImageView) vi1.findViewById(R.id.imageView2);
TextView tw1 = (TextView) vi1.findViewById(R.id.lName);
// TextView tw2 = (TextView) vi1.findViewById(R.id.County);
// TextView tw3 = (TextView) vi1.findViewById(R.id.user);
// imageLoader.DisplayImage(null, imv);
// imageLoader.DisplayImage(null, imv2);
tw1.setText("AZ");
}
return vi1;
}
编写getView代码时出现问题。每次都会为每一行创建视图。 请在下面找到使用getView方法的正确方法。您需要创建一个ViewHolder类
static class ViewHolder {
ImageView img1;
ImageView img2;
TextView tvTitle;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder holder;
if (row == null) {
holder = new ViewHolder();
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(R.layout.my_layout, parent, false);
holder.play = (Button) row.findViewById(R.id.btn_list_play);
holder.img1 = (ImageView) row.findViewById(R.id.img1_id);
holder.img2 = (ImageView) row .findViewById(R.id.img2_id);
holder.tvTitle = (TextView) row.findViewById(R.id.tvTitle_id);
row.setTag(holder);
}
else
{
holder = (ViewHolder ) row.getTag();
}
holder.tvTitle.setText("AZ");
return row;
}
getView()
的实现效率很低。搜索“ViewHolder”或“RowWrapper”策略进行改进。Android开发网站是一个很好的起点,但我绝对建议您通过。如果你愿意的话,YouTube上也有他的视频
您的结果最终应该是这样的:
@Override public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.my_layout, parent, false);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.lName);
holder.img1 = (ImageView) convertView.findViewById(R.id.Image);
holder.img2 = (ImageView) convertView.findViewById(R.id.imageView2);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText("AZ");
holder.img1.setImageBitmap(...);
holder.img2.setImageResource(...);
return convertView;
}
static class ViewHolder {
TextView text;
ImageView img1, img2;
}
但是也有同样的问题:(根据Listview的创建者Romanguy的说法,这种方法是在Listview中膨胀视图的推荐方法。)可能还有其他一些问题可能会导致这个问题…如果你可以发布更多的代码,那么诊断起来就会更容易。。