优化listview性能Android [英] Optimize listview performance Android

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

问题描述

我有一个 listView(垂直),每个列表项都有一个水平列表视图(水平).

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

但问题是当我在行中滚动水平滚动视图时,垂直列表也在调用 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;
    }

使用持有者类

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

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