2012-07-22 139 views
2

我試圖在網格視圖中顯示一些圖像。我的代碼適用於android 2.2和2.3,但不適用於2.1Android 2.1 gridview不顯示

在android 2.1中,網格總是空的/不可見的。

我使用網格視圖中的代碼是這一個:

gridview = (GridView)findViewById(R.id.level_select); 
gridview.setAdapter(new LevelImagesAdapter(this, levelsCount, 
      maxLevel, listener)); 
gridview.invalidate(); 

的LevelImagesAdapter是:

public class LevelImagesAdapter extends BaseAdapter { 

    private View.OnClickListener listener; 
    private Context mContext; 
    private int count; 
    private int maxLevel; 

    public LevelImagesAdapter(Context c, int maxLevel, int count, View.OnClickListener listener) { 
     this.mContext = c; 
     this.listener = listener; 
     this.count = count; 
     this.maxLevel = maxLevel; 
    } 

    @Override 
    public int getCount() { 
     return count; 
    } 

    @Override 
    public Object getItem(int position) { 
     return null; 
    } 

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     Button view; 
     if (convertView == null) { 
      view = new Button(mContext); 
      view.setOnClickListener(listener); 
      view.setLayoutParams(new GridView.LayoutParams(GridView.LayoutParams.WRAP_CONTENT, GridView.LayoutParams.WRAP_CONTENT)); 
      view.setPadding(5, 5, 5,5); 
     } 
     else { 
      view = (Button) convertView; 
     } 

     if (position <= maxLevel) { 
      view.setBackgroundResource(R.drawable.level_unlock); 
      view.setText((position + 1) + ""); 
      view.setTextColor(Color.WHITE); 
      view.setTextSize(16.0f); 
     } 
     else { 
      view.setBackgroundResource(R.drawable.level_lock); 
      view.setText(""); 
     } 
     return view; 
    } 

} 

據我所知道的,適配器被創建,但getView方法永遠不會被調用。

謝謝!

+0

你試過手動調用notifyDataSetChanged()嗎? – Codeman 2012-07-24 17:55:48

+0

作者:「據我所知,適配器已創建,但getView方法永遠不會被調用。」 - 你在裏面放了一個'Log.d'並運行它並檢查'LogCat'以確保它不被調用?或以某種方式使用調試? – 2012-07-24 18:04:54

+0

是的,我已經把一個Log.v放在方法中,它永遠不會被調用。 – gulyan 2012-07-24 18:49:11

回答

6

getItem(position)必須返回其他的東西比NULL

確保getCount()返回一個非零數字。

檢查並確保你有你的GridView佈局參數在佈局設置爲fill_parent,而不是match_parent下API級別不支持match_parent所以fill_parent是向後兼容。 GridView可以隱藏,在這種情況下它不會調用getView

+0

getCount()不是0;我的需求佈局參數必須是wrap_content;將嘗試使用getItem – gulyan 2012-07-25 08:01:25

+0

如果顯示的項目數量大於可查看區域,wrap_content將會出現問題。本質上,如果你使用wrap_content作爲網格的高度或寬度,它總是會創建getCount()數量的項目,這首先顛覆了使用GridView的全部好處。您保證佔用顯示所有項目所需的最大內存量。如果內部的視圖項標記爲fill_parent/match_parent,則wrap_content可能會產生問題。 – chubbsondubs 2012-07-25 17:56:43

+0

如果在寬度上使用wrap_content,則不會在網格上進行任何換行。它全部只是getCount()項的一行。 – chubbsondubs 2012-07-25 17:57:45