[英]Create a clickable image in a GridView in 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;
}
它將如何顯示點擊的圖像? 如何創建正確的處理程序?
對於GridView,您可以使用setOnItemClickListener方法來擁有OnItemClickListener偵聽器。 該偵聽器將為您提供一個必須使用簽名覆蓋的方法
onItemClick(AdapterView<?> parent, View v, int position, long id)
在哪里可以獲得單擊的網格中項目的位置以及網格單元格內的視圖。 這就是你需要的嗎?
我嘗試了上面提到的方法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)+"]");
}
};
}
通過使位置最終並向imageView添加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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.