Создайте интерактивное изображение в GridView в Android - PullRequest
11 голосов
/ 11 апреля 2009

У меня есть изображения, отображаемые в GridView, как в этого урока . Я хочу, чтобы можно было нажимать на одно изображение и делать другие события, и мне нужно знать, какое изображение было нажато.

Нужно ли добавлять imageView.onKeyDown (keyCode, событие) в класс ImageAdapter? Вот код, как он существует в настоящее время:

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

Как это будет указывать, какое изображение было нажато? Как мне создать правильный обработчик?

Ответы [ 3 ]

25 голосов
/ 17 апреля 2009

Для GridView вы можете использовать метод setOnItemClickListener, чтобы иметь прослушиватель OnItemClickListener. Этот слушатель даст вам метод, который вы должны переопределить с помощью подписи

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

где вы получаете позицию элемента в сетке, на которую щелкнули, и вид, который находится внутри ячейки сетки. Это то, что вам нужно?

6 голосов
/ 26 апреля 2011

я попробовал вышеупомянутый метод getView (финальная позиция int. понял, что позиция получила «сброс» после 28 элементов, а позиция вернулась к 0 после 28-го элемента в сетке.

Я подозревал, что последнее ключевое слово создает проблему, и после его удаления я смог получить позиции, как ожидалось.

Ниже приведен пример кода с событием click, вызываемым в действии, которое демонстрирует представление grid.

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 голосов
/ 11 апреля 2009

Мне удалось определить положение изображения, по которому щелкнули мышью, установив окончательную позицию и добавив прослушиватель 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;
}
...