优化列表视图性能的Andr​​oid [英] Optimize listview performance Android

查看:126
本文介绍了优化列表视图性能的Andr​​oid的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个ListView(垂直),每个列表项具有水平列表视图(水平)。

但问题是,当我滚动水平滚动视图该行的垂直列表中还呼吁getView()的...

所以,有一个巨大的性能损失.. 因此,任何一个可以告诉我一个更好的解决方案,它..

 公共类GridViewAdapter扩展了BaseAdapter {

    名单<列表<酒店>> gridDatasource;
    语境mContext;

    公共GridViewAdapter(名单<列表<酒店>> gridDatasource,上下文语境){
        this.gridDatasource = gridDatasource;
        this.mContext =背景;
    }

    公共无效setGridDatasource(名单<列表<酒店>> gridDatasource){
        this.gridDatasource = gridDatasource;
    }

    @覆盖
    公众诠释getCount将(){
        如果(gridDatasource == NULL){
            返回0;
        }
        返回gridDatasource.size();
    }

    @覆盖
    公共对象的getItem(INT位置){
        返回gridDatasource.get(位置);
    }

    @覆盖
    众长getItemId(INT位置){
        返回的位置;
    }

    @覆盖
    公共查看getView(INT位置,查看convertView,ViewGroup中父){
        GridViewHolder持有人;
        如果(convertView == NULL){
            LayoutInflater充气=(LayoutInflater)mContext
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.gridview_table_cell,
                    空值);

            持有人=新GridViewHolder();
            holder.headerView =(TextView中)convertView
                    .findViewById(R.id.gridViewRowHeader);
            holder.listView =(Horizo​​ntalListView)convertView
                    .findViewById(R.id.gridViewHorizo​​ntalListView);
            convertView.setTag(保持器);
        } 其他 {
            支架=(GridViewHolder)convertView.getTag();
            Log.d(TAG,此间);
        }
        holder.headerView.setText(你好从桑迪普);
        Horizo​​ntalListViewAdapter适配器=新Horizo​​ntalListViewAdapter(
                mContext,gridDatasource.get(位置));
        holder.listView.setAdapter(适配器);
        返回convertView;
    }

}

静态类GridViewHolder {
    TextView的headerView;
    Horizo​​ntalListView的ListView;
}

公共类Horizo​​ntalListViewAdapter扩展了BaseAdapter {
    语境mContext;
    名单<酒店> mHotels;

    公共Horizo​​ntalListViewAdapter(上下文的背景下,列表<酒店>酒店){
        this.mContext =背景;
        this.mHotels =酒店;
    }

    @覆盖
    公众诠释getCount将(){
        如果(mHotels == NULL){
            返回0;
        }
        返回mHotels.size();
    }

    @覆盖
    公共对象的getItem(INT位置){
        返回mHotels.get(位置);
    }

    @覆盖
    众长getItemId(INT位置){
        返回的位置;
    }

    @覆盖
    公共查看getView(INT位置,查看convertView,ViewGroup中父){
        HotelCell细胞=(HotelCell)convertView;
        如果(细胞== NULL){
            电池=新HotelCell(mContext);
        } 其他 {
            Log.d(TAG,在这里达到了2);
        }
        cell.setHotel(mHotels.get(位置));
        cell.setOnClickListener(新OnClickListener(){

            @覆盖
            公共无效的onClick(视图v){
                意向意图=新的意图(mContext,
                        HotelDetailActivity.class);
                intent.putExtra(DATA((HotelCell)ⅴ).getHotel());
                startActivity(意向);
            }
        });
        cell.setPadding(0,0,10,0);
        返回细胞;
    }
}
 

解决方案

亲爱的,我建议试试我这个code

 公开查看getView(最终诠释的立场,观点convertView,父母的ViewGroup)
    {
         视图V = convertView;
         ViewHolder持有人;

         如果(V == NULL)
         {
             V = inflater.inflate(R.layout.custom_image_layout,NULL);
             持有人=新ViewHolder();
             holder.txtFileName =(TextView中)v.findViewById(R.id.txtFileName);
             holder.imageView =(ImageView的)v.findViewById(R.id.imgView);
             v.setTag(保持器);
         } 其他
         {
             支架=(ViewHolder)v.getTag();
         }
holder.imageView.setImageBitmap(BM);
holder.txtFileName.setText(+ nameoffile);
返回伏;
    }
    静态类ViewHolder
    {
         公众的ImageView ImageView的;
         公众的TextView txtFileName;
    }
 

使用的座级

I have a listView (vertical) and every list item has a horizontal list view (horizontal).

But the problem is when i scroll the horizontal scrollview in the row the vertical list is also calling getView()...

So, there is a huge performance hit.. So , can any one tell me a better solution to it ..

    public class GridViewAdapter extends BaseAdapter {

    List<List<Hotel>> gridDatasource;
    Context mContext;

    public GridViewAdapter(List<List<Hotel>> gridDatasource, Context context) {
        this.gridDatasource = gridDatasource;
        this.mContext = context;
    }

    public void setGridDatasource(List<List<Hotel>> gridDatasource) {
        this.gridDatasource = gridDatasource;
    }

    @Override
    public int getCount() {
        if (gridDatasource == null) {
            return 0;
        }
        return gridDatasource.size();
    }

    @Override
    public Object getItem(int position) {
        return gridDatasource.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        GridViewHolder holder;
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) mContext
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.gridview_table_cell,
                    null);

            holder = new GridViewHolder();
            holder.headerView = (TextView) convertView
                    .findViewById(R.id.gridViewRowHeader);
            holder.listView = (HorizontalListView) convertView
                    .findViewById(R.id.gridViewHorizontalListView);
            convertView.setTag(holder);
        } else {
            holder = (GridViewHolder) convertView.getTag();
            Log.d("TAG", "Reaching Here");
        }
        holder.headerView.setText("Hello From Sandeep");
        HorizontalListViewAdapter adapter = new HorizontalListViewAdapter(
                mContext, gridDatasource.get(position));
        holder.listView.setAdapter(adapter);
        return convertView;
    }

}

static class GridViewHolder {
    TextView headerView;
    HorizontalListView listView;
}

public class HorizontalListViewAdapter extends BaseAdapter {
    Context mContext;
    List<Hotel> mHotels;

    public HorizontalListViewAdapter(Context context, List<Hotel> hotels) {
        this.mContext = context;
        this.mHotels = hotels;
    }

    @Override
    public int getCount() {
        if (mHotels == null) {
            return 0;
        }
        return mHotels.size();
    }

    @Override
    public Object getItem(int position) {
        return mHotels.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        HotelCell cell = (HotelCell) convertView;
        if (cell == null) {
            cell = new HotelCell(mContext);
        } else {
            Log.d("TAG", "Reached here 2");
        }
        cell.setHotel(mHotels.get(position));
        cell.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(mContext,
                        HotelDetailActivity.class);
                intent.putExtra("DATA", ((HotelCell) v).getHotel());
                startActivity(intent);
            }
        });
        cell.setPadding(0, 0, 10, 0);
        return cell;
    }
}

解决方案

Dear i suggest to try My this Code

public View getView(final int position, View convertView, ViewGroup parent) 
    {
         View v = convertView;
         ViewHolder holder;

         if (v == null) 
         {
             v = inflater.inflate(R.layout.custom_image_layout, null);
             holder = new ViewHolder();
             holder.txtFileName = (TextView) v.findViewById(R.id.txtFileName);
             holder.imageView = (ImageView) v.findViewById(R.id.imgView);
             v.setTag(holder);
         } else 
         {
             holder = (ViewHolder) v.getTag();
         }
holder.imageView.setImageBitmap(bm);
holder.txtFileName.setText(""+nameoffile);
return v;
    }
    static class ViewHolder 
    {
         public ImageView imageView;
         public TextView txtFileName;
    }

Use The Holder Class

这篇关于优化列表视图性能的Andr​​oid的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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