优化列表视图性能的Android [英] Optimize listview performance Android
本文介绍了优化列表视图性能的Android的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个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 =(HorizontalListView)convertView
.findViewById(R.id.gridViewHorizontalListView);
convertView.setTag(保持器);
} 其他 {
支架=(GridViewHolder)convertView.getTag();
Log.d(TAG,此间);
}
holder.headerView.setText(你好从桑迪普);
HorizontalListViewAdapter适配器=新HorizontalListViewAdapter(
mContext,gridDatasource.get(位置));
holder.listView.setAdapter(适配器);
返回convertView;
}
}
静态类GridViewHolder {
TextView的headerView;
HorizontalListView的ListView;
}
公共类HorizontalListViewAdapter扩展了BaseAdapter {
语境mContext;
名单<酒店> mHotels;
公共HorizontalListViewAdapter(上下文的背景下,列表<酒店>酒店){
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
这篇关于优化列表视图性能的Android的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文