Этот адаптер 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);
}
};
Первый вариант (хороший способ)
Вы сохраняете ссылку на свой адаптер (или получаете его, вызывая parent.getAdapter()
а затем parent.getAdapter()
его)
В вашем адаптере убедитесь, что вы переопределили getItem(position)
чтобы вернуть объект, который вы использовали для заполнения вашего адаптера (возможно, что-то вроде return arrayList.getItem(position)
если вы использовали BaseAdapter)
На адаптере вы вызываете getItem(position)
и это даст вам тот же самый объект, поэтому вы должны иметь всю необходимую вам информацию
Второй вариант (простой выход)
Вы можете поместить информацию в представление gridviewitem с помощью setTag()
затем в onItemClick
вы вызываете getTag()
и там у вас есть свой уникальный идентификатор
Вы можете использовать класс POJO для установки URL и идентификатора изображения в этом классе и создания и ArrayList для того же и передачи этого класса адаптера. Посредством этого вы привяжете свой ImageView и ImageID из своей базы данных. И, затем внутри onItemClick()
вы можете просто использовать
POJO pojo = listview.getAdapter().getitem(position);
int id = pojo.getId();