2012-06-02 1 views
1

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

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

}; 

ответ

6

Первый вариант (красивая дорога)

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

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

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

Второй вариант (легкий путь)

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

+0

Это замечательно. парень. Я успешно передал идентификатор моей следующей операции со вторым вариантом, который вы упомянули. Однако вы имеете в виду, что вся информация, отличная от ИД, может быть передана следующей Деятельности putExtra («информация», getItem (позиция))? Но я думаю, что лучше использовать другую информацию после того, как пользователь нажал на элемент, который снова запрашивает базу данных для получения подробной информации. – Henry

+0

Возможно, но для такого рода вещей я считаю, что лучше всего смотреть на случай. Но посмотрите на getSerializableExtra(), потому что вы обязательно столкнетесь с ситуациями, когда лучше будет использовать – vanleeuwenbram

+0

, как разные getSerializableExtra() по сравнению с getExtra()? Я знал, что Serializable Data используется для потока ввода-вывода. Кстати, теперь я могу добавить дополнительную информацию, используя setExtra() даже с getTag(), поскольку мой JSONArary сохраняется как переменная для Activity. – Henry

1

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

POJO pojo = listview.getAdapter().getitem(position); 
int id = pojo.getId(); 
+0

Класс POJO для меня совершенно новый. Я постараюсь, если у меня будет время. В любом случае, спасибо. – Henry

+0

Его ничего не значит, что только убирающий класс. –