2012-05-23 32 views
0

目前我在看http://developer.android.com/resources/tutorials/views/hello-gridview.html 我的onCreate(),和的onResume getView()創建的測試項目與其他日誌谷歌Android官方的GridView教程

package com.hello.namespace; 

import android.content.Context; 
import android.util.Log; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 

public class ImageAdapter extends BaseAdapter { 
    private static final String TAG = "ImageAdapter"; 
    private Context mContext; 

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

    public int getCount() { 
     return mThumbIds.length; 
    } 

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

    public long getItemId(int position) { 
     return 0; 
    } 

    // create a new ImageView for each item referenced by the Adapter 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ImageView imageView; 
     if (convertView == null) { // if it's not recycled, initialize some attributes 
      Log.e(TAG, "position = " + position); 
      imageView = new ImageView(mContext); 
      imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); 
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      imageView.setPadding(8, 8, 8, 8); 
     } else { 
      imageView = (ImageView) convertView; 
     } 

     imageView.setImageResource(mThumbIds[position]); 
     return imageView; 
    } 

    // references to our images 
    private Integer[] mThumbIds = { 
      R.drawable.sample_2, R.drawable.sample_3, 
      R.drawable.sample_4, R.drawable.sample_5, 
      R.drawable.sample_6, R.drawable.sample_7, 
      R.drawable.sample_0, R.drawable.sample_1, 
      R.drawable.sample_2, R.drawable.sample_3, 
      R.drawable.sample_4, R.drawable.sample_5, 
      R.drawable.sample_6, R.drawable.sample_7, 
      R.drawable.sample_0, R.drawable.sample_1, 
      R.drawable.sample_2, R.drawable.sample_3, 
      R.drawable.sample_4, R.drawable.sample_5, 
      R.drawable.sample_6, R.drawable.sample_7 
    }; 

} 

日誌輸出:

05-23 08:59:13.541: E/HelloGridViewActivity(733): onCreate() 
05-23 08:59:13.551: E/HelloGridViewActivity(733): onResume() 
05-23 08:59:13.711: E/ImageAdapter(733): position = 0 
05-23 08:59:14.380: E/ImageAdapter(733): position = 1 
05-23 08:59:15.190: E/ImageAdapter(733): position = 2 
05-23 08:59:15.771: E/ImageAdapter(733): position = 3 
05-23 08:59:16.340: E/ImageAdapter(733): position = 4 
05-23 08:59:17.141: E/ImageAdapter(733): position = 5 
05-23 08:59:17.721: E/ImageAdapter(733): position = 6 
05-23 08:59:18.330: E/ImageAdapter(733): position = 7 
05-23 08:59:18.611: E/ImageAdapter(733): position = 8 
05-23 08:59:18.631: E/ImageAdapter(733): position = 9 
05-23 08:59:18.631: E/ImageAdapter(733): position = 10 
05-23 08:59:18.651: E/ImageAdapter(733): position = 11 
05-23 08:59:18.651: E/ImageAdapter(733): position = 12 
05-23 08:59:18.671: E/ImageAdapter(733): position = 13 
05-23 08:59:18.681: E/ImageAdapter(733): position = 14 
05-23 08:59:18.691: E/ImageAdapter(733): position = 15 
05-23 08:59:18.701: E/ImageAdapter(733): position = 16 
05-23 08:59:18.721: E/ImageAdapter(733): position = 17 
05-23 08:59:18.721: E/ImageAdapter(733): position = 18 
05-23 08:59:18.741: E/ImageAdapter(733): position = 19 
05-23 08:59:18.741: E/ImageAdapter(733): position = 20 
05-23 08:59:18.891: E/ImageAdapter(733): position = 0 

而且這裏有兩個問題:

  1. 爲什麼ImageView的位置0創建了兩次?

  2. 比方說,我想用ImageView做點什麼。我會創建ImageView數組,並在getView()中初始化它的元素,但是我不能在onCreate()或onResume()中使用它,因爲ImageViews不存在!我該怎麼辦?

對不起,我的英文。

回答

1

1:我假設你滾動你的List來獲得這個日誌(因爲getView只在視圖可見的情況下被調用),所以它可能只是再次滾動,並且在pos 0處的View被滾動到頂部並從頂部再次來...

2:取決於爲什麼你想在onCreateonResume有你的意見。如果沒有其他解決方案,並且您必須擁有它們,您可以簡單地在onCreate中自己創建所有視圖,將它們保存在列表中,然後將其以getView形式返回。我會盡量避免這種情況,因爲如果有Visible並重用它們,ListView將立即使用視圖。你會在我描述的實現中丟失這個特性,所以請告訴我們,爲什麼你想在之前有它getView

+0

1.我沒有滾動,但最後一張圖片是不可見的(它低於屏幕)。有關係嗎? 2.我想在應用程序啓動時向第一行中的圖像添加彩色邊框。 –

+0

抱歉,我沒有saW,只有在convertView == null的情況下才會記錄。這使我的第一個假設不可能。我沒有想法,爲什麼這被稱爲不止一次,它對我沒有任何意義。對於你的第二個問題:我會在'getView()'中製作彩色邊框,並檢查你是否在第一行那裏... –