2009-04-10 66 views
11

我的圖像顯示在GridView中,如this tutorial。我希望能夠點擊單個圖像並完成其他事件,並且我需要知道點擊了哪個圖像。在Android的GridView中創建可點擊的圖像

我必須在ImageAdapter類中添加imageView.onKeyDown(keyCode,event)嗎?以下是目前存在的代碼:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView imageView; 
    if (convertView == null) { 
    // if it's not recycled, initialize some attributes 
    imageView = new ImageView(mContext); 
    imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); 
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
    imageView.setPadding(8, 8, 8, 8); 
    //does this need imageView.onKeyDown(keyCode, event)? 
    } 
    else { 
    imageView = (ImageView) convertView; 
    } 

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

它將如何指示單擊了哪個圖像?我如何創建正確的處理程序?

回答

24

對於一個GridView可以使用setOnItemClickListener方法有一個OnItemClickListener聽衆。該偵聽器會給你,你必須與簽名

onItemClick(AdapterView<?> parent, View v, int position, long id) 

你在哪裏得到的項目中被點擊的網格的位置,並認爲是網格的單元格內覆蓋的方法。那是你需要的嗎?

6

我能夠通過定位最終位置並添加一個onClick監聽器來獲取點擊圖像的位置。這記錄了被點擊的圖像的位置。

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    ImageView imageView; 
    if (convertView == null) { 
    // if it's not recycled, initialize some attributes 
    imageView = new ImageView(mContext); 
    imageView.setLayoutParams(new GridView.LayoutParams(85, 85)); 
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
    imageView.setPadding(8, 8, 8, 8); 


    imageView.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 
     Log.d("onClick","position ["+position+"]"); 
     } 

    }); 

    } 
    else { 
    imageView = (ImageView) convertView; 
    } 

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

這是不是你想要做的事情的方式。而是使用Alejandros方法。它更清潔,不涉及更改方法簽名。 – 2011-10-03 19:48:02

+0

取而代之,請參閱[Jianhong的回答](http://stackoverflow.com/a/5789159/199364),其中顯示了使用Alejandro描述的gridView.setOnItemClickListener的代碼。 (如果試圖在此答案中使用解決方案,則會提到一個錯誤。) – ToolmakerSteve 2016-12-29 19:21:37

6

我試過上面提到的方法getView(final int position ...) 意識到該位置在28個項目後獲得「重置」,並且在gridview中的第28個項目之後回到0的位置。

我懷疑最終的關鍵字是創建問題,並刪除它後,我能夠得到預期的職位。

以下是展示GridView的活動中正在調用click事件的示例代碼。

public class MainActivity extends Activity { 

ArrayList<Integer> item_ids = new ArrayList<Integer>(); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    item_ids = //get your item ids method 

    GridView gridview = (GridView) findViewById(R.id.grid_featured); 
    gridview.setAdapter(new ImageAdapter(this)); 
    gridview.setOnItemClickListener(itemClickListener); 

    footer = (Footer)findViewById(R.id.layoutFooter); 
    footer.setActivity(this); 
} 

private OnItemClickListener itemClickListener = new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
    Log.d(TAG,"Position Clicked ["+position+"] with item id ["+item_ids.get(position)+"]"); 
    } 
}; 

}