2014-10-07 85 views
1

我是Android开发新手,遇到性能问题。当我的GridView有太多的项目时,它变得有点慢。有什么办法让它表现得更快一点?Android Slow GridView

下面是使用代码IM:

适配器:

public class CharactersAdapter extends BaseAdapter { 
private Context mContext; 
private int screenSize; 
private int columns; 
// Constructor 

public CharactersAdapter(Context c,int screenSize) { 
    this.screenSize=screenSize; 
    mContext = c; 
} 

public CharactersAdapter(Context c) { 
    mContext = c; 
} 

@Override 
public int getCount() { 
    return charPics.length; 
} 

@Override 
public Object getItem(int i) { 

    return charPics[i]; 
} 

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

@Override 
public View getView(int i, View convertView, ViewGroup viewGroup) { 
    ImageView imageView; 
    this.columns=mContext.getResources().getInteger(R.integer.grid_columns); 
    if (convertView == null) { 

     imageView = new ImageView(mContext); 
     imageView.setLayoutParams(new GridView.LayoutParams(screenSize /this.columns,screenSize  /this.columns)); 
     imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
    }else{ 
     imageView = (ImageView) convertView; 
    } 
    imageView.setImageDrawable(mContext.getResources().getDrawable(charPics[i])); 
    return imageView; 
}} 

片段

public class CharacterFragment extends Fragment { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    DisplayMetrics displaymetrics = new DisplayMetrics(); 
    getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
    int screenWidth = displaymetrics.widthPixels; 


    View rootView = inflater.inflate(R.layout.fragment_character, container, false); 
    GridView gridview = (GridView)rootView.findViewById(R.id.gridview); 
    gridview.setAdapter(new CharactersAdapter(getActivity(),screenWidth)); 

    gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, 
           int position, long id) { 

      Intent i = new Intent(getActivity().getApplicationContext(), CharacterActivity.class); 
      // Pass image index 
      i.putExtra("pos", position); 
      startActivity(i); 
     } 
    }); 

    return rootView; 
} 

我是不是做错了什么....

+0

如果你有大的图像,那么当你将图像设置为图像视图时,你会发现它很慢 – tyczj 2014-10-07 20:19:24

+0

网格有51个图像大约50Kb – Sorbete 2014-10-07 20:20:57

+0

我不认为像图像大小那么大我的意思是像图像尺寸那么大 – tyczj 2014-10-07 20:21:38

回答

0

我结束了使用毕加索图书馆加载图像。它像一个魅力。

3

我真的建议更换你在那里使用Holder Pattern,在其中保存您创建的视图以便重复使用并节省内存将传输的内容更多的性能,here是一个非常好的教程。也为图像加载,你可以使用通用图像加载器,使图像加载UIL异步,所以你的用户界面线程不会慢。好运

+1

'ViewHolder'模式实际上*效率较低。没有'findViewById()'调用 - 它只是一个'ImageView'。 – kcoppock 2014-10-07 20:37:57