У меня есть список, и я хочу получать данные из ArrayList, когда я нажимаю на элемент, но я не знаю, как это сделать:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, final View view, int position, long id) {
//what do i do
}
});
Таким образом я получаю данные:
JSONObject object = new JSONObject(response);
JSONArray jsonArray = object.getJSONArray("search");
for (int i = 0; i < jsonArray.length(); i++){
final JSONObject object1 = jsonArray.getJSONObject(i);
arrayList.add(new resultsearch(
object1.getInt("id"),
object1.getString("destination"),
object1.getString("infor"),
object1.getString("city"),
object1.getInt("rating"),
object1.getString("img"),
BigDecimal.valueOf(object1.getDouble("point")).floatValue(),
object1.getString("comments")
));
}
adapter.notifyDataSetChanged();
Я предполагаю, что у вас уже есть записи в вашем списке. Я думаю, что ваш список внутри адаптера будет arrayList. Таким образом, позиция внутри arraylist — это позиция элемента, на который вы нажали.
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, final View view, int position, long id) {
arraylist.get(position);
}
});
Я не знаю, что у вас здесь за объект: Так что это будет что-то вроде: Object yourObject = arraylist.get(position);
Или, как упоминалось в комментариях Карима. Получите предмет через адаптер adapter#getItem(position)!
Вот так! Ваш способ лучше! Я отредактирую свой ответ.
Вы можете использовать аргумент position для AdapterView.OnItemClickListener#onItemClick, чтобы получить доступ к вашим данным в любой конкретной позиции.
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, final View view, int position, long id) {
Object item = adapter.getItem(position);
}
});
Добро пожаловать. Удачи!
Что вы можете сделать, чтобы получить данные из ArrayList внутри метода OnitemClickListener, это:
bookList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String bookName = booksArrayList.get(position);
}
});
С помощью метода get вы получаете значение по индексу position в вашем списке массивов.
Я предполагаю, что у вас есть все геттеры в классе ResultSearch
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, final View view, int position, long id) {
String information;
ResultSearch resultSearch = arrayList.get(position);
information = new StringBuilder()
.append("id: " + resultSearch.getInt("id") + "\n")
.append("destination: " + resultSearch.getString("destination") + "\n")
.append("infor: " + resultSearch.getString("infor") + "\n")
.append("city: " + resultSearch.getString("city") + "\n")
.append("rating: " + resultSearch.getInt("rating") + "\n")
.append("img: " + resultSearch.getString("img") + "\n")
.append("point: " + resultSearch.getDouble("point") + "\n")
.append("comments: " + resultSearch.getString("comments") + "\n")
.toString();
//display this using an AlertDialog or open an activity containing this information
}
});
Это один из способов сделать это, но я предпочитаю не использовать
arrayList, потому что иногда данные в адаптере не синхронизируются сarrayList. Я предпочитаюadapter#getItem(position).