11

このチュートリアルのように、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;
}

どの画像がクリックされたかをどのように示しますか? 適切なハンドラーを作成するにはどうすればよいですか?

4

3 に答える 3

25

GridViewの場合、setOnItemClickListenerメソッドを使用してOnItemClickListenerリスナーを作成できます。そのリスナーは、署名でオーバーライドする必要があるメソッドを提供します

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

クリックされたグリッド内のアイテムの位置と、グリッドのセル内にあるビューを取得します。それはあなたが必要なものですか?

于 2009-04-17T08:25:58.403 に答える
6

上記のメソッド getView(final int position . . .) を試してみたところ、28 個のアイテムの後に位置が「リセット」され、グリッドビューの 28 番目のアイテムの後に位置が 0 に戻ったことがわかりました。

最終的なキーワードが問題を引き起こしていると思われ、それを削除した後、期待どおりに位置を取得できました。

以下は、グリッドビューを表示しているアクティビティで呼び出されるクリック イベントのサンプル コードです。

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)+"]");
    }
};

}

于 2011-04-26T10:44:39.850 に答える