Реализация OnItemClickListener () для динамического GirdView / ListView

1

Этот адаптер GridView создает ImageView из макета. Все изображения загружаются с URLs относительно item IDs базы данных, где ID получен из JSONArray. Скажем, теперь в представлении отображаются элементы с ID: 1,3,4,7. Поскольку элементы GridView являются динамическими, позиция (начиная с 0) не может действительно идентифицировать мой элемент в GridView. Есть ли другие способы идентифицировать это изображение из идентификаторов элемента базы данных?

public OnItemClickListener ClickListner = new OnItemClickListener()
{
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        //Toast.makeText(getApplicationContext(), 
        //      ""+position, Toast.LENGTH_SHORT).show();

        //Identification code for the item to be added here

        Intent view = 
                new Intent(main.this, View.class);
        view.putExtra("ID", id); 
        //expected to have an ID equal to database item ID
        startActivity(view);
    }

};
Теги:
gridview
listview
onitemclicklistener

2 ответа

6
Лучший ответ

Первый вариант (хороший способ)

Вы сохраняете ссылку на свой адаптер (или получаете его, вызывая parent.getAdapter() а затем parent.getAdapter() его)

В вашем адаптере убедитесь, что вы переопределили getItem(position) чтобы вернуть объект, который вы использовали для заполнения вашего адаптера (возможно, что-то вроде return arrayList.getItem(position) если вы использовали BaseAdapter)

На адаптере вы вызываете getItem(position) и это даст вам тот же самый объект, поэтому вы должны иметь всю необходимую вам информацию

Второй вариант (простой выход)

Вы можете поместить информацию в представление gridviewitem с помощью setTag() затем в onItemClick вы вызываете getTag() и там у вас есть свой уникальный идентификатор

  • 0
    Замечательно. парень. Я успешно передал идентификатор моей следующей активности со вторым вариантом, который вы упомянули. Тем не менее, вы имеете в виду, что вся информация, кроме только идентификатора, может быть передана в следующую активность с помощью putExtra ("info", getItem (position))? Но я думаю, что лучше получить другую информацию после того, как пользователь нажмет на элемент, который снова запросит базу данных для получения подробной информации.
  • 0
    Это возможно, но для такого рода вещей я думаю, что лучше взглянуть на конкретный случай. Но взгляните на getSerializableExtra (), потому что вы наверняка столкнетесь со случаями, когда это будет лучше практиковать
Показать ещё 3 комментария
1

Вы можете использовать класс POJO для установки URL и идентификатора изображения в этом классе и создания и ArrayList для того же и передачи этого класса адаптера. Посредством этого вы привяжете свой ImageView и ImageID из своей базы данных. И, затем внутри onItemClick() вы можете просто использовать

 POJO pojo = listview.getAdapter().getitem(position);
 int id = pojo.getId();
  • 0
    Класс POJO для меня совершенно новый. Я бы попробовал, если бы у меня было время. В любом случае, спасибо.
  • 0
    Это не просто класс-получатель сеттера.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню