2014-10-07 86 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