web-dev-qa-db-ja.com

Android)のGridViewでクリック可能な画像を作成します

このチュートリアル のようにGridViewに画像を表示しています。 1つの画像をクリックして他のイベントを実行できるようにしたいのですが、どの画像がクリックされたかを知る必要があります。

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;
}

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

11
Tai Squared

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

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

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

25

上記のメソッド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)+"]");
    }
};

}

6
Jianhong

クリックした画像の位置を最終的な位置にし、onClickリスナーをimageViewに追加することで、その位置を取得することができました。これは、クリックされた画像の位置をログに記録します。

@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;
}
6
Tai Squared