Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用GridView时跳过android中的帧?_Android_Android Gridview - Fatal编程技术网

使用GridView时跳过android中的帧?

使用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

当我使用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, 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中膨胀视图的推荐方法。)可能还有其他一些问题可能会导致这个问题…如果你可以发布更多的代码,那么诊断起来就会更容易。。