android получить позицию нажатого элемента в gridview


Как мы знаем, используя Android grid view, мы можем сделать следующее и получать уведомления, когда элемент нажат:

gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    Toast.makeText(PopularCapitActivity.this, "" + position, Toast.LENGTH_SHORT).show();
    }
});

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

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

Спасибо

2 8

2 ответа:

Предполагая, что вы используете пользовательский адаптер для GridVIew, в методе getView вы можете просто добавить тег к объекту Button, который содержит позицию, переданную в getView:

button.setTag(new Integer(position));

Затем, в методе onClickListener, с видом, который передается в (кнопка) вы можете сделать:

Integer position = (Integer)view.getTag();

И затем обработайте значение позиции оттуда.

Редактировать: По-видимому, наилучшей практикой было бы сделать:

button.setTag(Integer.valueOf(position));

Вместо использования целочисленного конструктора.

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() 
{
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id)
    {
        String a = String.valueOf(position);
        Toast.makeText(getApplicationContext(), a, Toast.LENGTH_SHORT).show();
    }
});