Все элементы заполняются правильно в представлении списка, но когда я выбираю элемент, на самом деле работают только позиции 0 и 5, остальные элементы всегда возвращают позиции 1-5, возвращаясь назад. Что я сделал не так?
Код: Выделить всё
private void Display_Images() {
ListView listOfImages = findViewById(R.id.avatar_list);
listOfImages.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view, int position, long id) {
FirebaseAuth mAuth =FirebaseAuth.getInstance();
String userid = mAuth.getUid();
avatar_id = AVATAR_ID.get(position);
DatabaseReference db = FirebaseDatabase.getInstance().getReference().child("Users").child(userid);
db.child("avatarID").setValue(avatar_id);
finish();
}
});
adapter = new FirebaseListAdapter(this, Image_Selector.class,
R.layout.avatars, FirebaseDatabase.getInstance().getReference().child("Avatars")) {
@Override
protected void populateView(View v, Image_Selector model, int position) {
imageView = v.findViewById(R.id.image);
tv = v.findViewById(R.id.tvavatar);
AVATAR_ID.add(model.getID());
tv.setText(model.getName());
Glide.with(getBaseContext()).load(model.getUrl()).into(imageView);
}
};
listOfImages.setAdapter(adapter);
}
Код: Выделить всё
"Avatars" : {
"Batman1" : {
"id" : "Batman1",
"name" : "Batman Logo",
"url" : "url to image"
},
"Default" : {
"id" : "Default",
"name" : "Default",
"url" : "url to image"
},
"Test" : {
"id" : "Test",
"name" : "TEST",
"url" : ""
}
Код: Выделить всё
"Users" : {
"F3vHZSClnPhE9cDjPeY5x0PuTmz1" : {
"Username" : "Username Appears here.",
"avatarID" : "here is where the id should be saved",
},
Это мой класс модели Firebase
Код: Выделить всё
public class Image_Selector {
String name;
String url;
String id;
public Image_Selector(String name,String url,String id){
this.name = name;
this.url = url;
this.id = id;
}
public Image_Selector(){
}
public void setName(String name) {
this.name = name;
}
public void setUrl(String url) {
this.url = url;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public String getUrl() {
return url;
}
public String getId() {
return id;
}
Если я выберу Бэтмена, возвращаемый идентификатор будет batman1, но если я выберу «Тестовый элемент», он все равно вернет идентификатор Бэтмена 1. Если я выберу «По умолчанию», он вернет идентификатор по умолчанию. Я попытался добавить еще несколько элементов в базу данных, и в зависимости от высоты и ширины моего пользовательского файла listviewitem.xml получится своего рода цикл. Позволяет мне захватывать только идентификаторы из элемента представления списка, который я вижу. Любые элементы за пределами экрана будут возвращать неправильный идентификатор, возвращаясь к позициям 0,1,2,3 и т. д.
Изменить
Добавлены журналы в мой метод щелчка по элементу
Код: Выделить всё
String pos = String.valueOf(position);
Log.i("String_ID ",avatar_id);
Log.i("String_POSITION ",pos);
Log.i("String_USERID",userid);
Пункт 1 в моем списке — «Бэтмен», и он возвращается
Код: Выделить всё
2019-07-11 12:04:51.152 3685-3685/studios.p9p.chatomatic.chat_o_matic
I/String_ID: Batman1
2019-07-11 12:04:51.152 3685-3685/studios.p9p.chatomatic.chat_o_matic
I/String_POSITION: 0
2019-07-11 12:04:51.152 3685-3685/studios.p9p.chatomatic.chat_o_matic
I/String_USERID: F3vHZSClnPhE9cDjPeY5x0PuTmz1
Код: Выделить всё
2019-07-11 12:06:22.920 3685-3685/studios.p9p.chatomatic.chat_o_matic
I/String_ID: Default
2019-07-11 12:06:22.935 3685-3685/studios.p9p.chatomatic.chat_o_matic
I/String_POSITION: 1
2019-07-11 12:06:22.935 3685-3685/studios.p9p.chatomatic.chat_o_matic
I/String_USERID: F3vHZSClnPhE9cDjPeY5x0PuTmz1
Код: Выделить всё
2019-07-11 12:07:18.983 3685-3685/studios.p9p.chatomatic.chat_o_matic
I/String_ID: Batman1
2019-07-11 12:07:18.984 3685-3685/studios.p9p.chatomatic.chat_o_matic
I/String_POSITION: 2
2019-07-11 12:07:18.984 3685-3685/studios.p9p.chatomatic.chat_o_matic
I/String_USERID: F3vHZSClnPhE9cDjPeY5x0PuTmz1
Код: Выделить всё
String modelid = model.getID();
Log.i("String_id_AtSource",modelid);
2019-07-11 12:20:34.504 3685-3685/studios.p9p.chatomatic.chat_o_matic
I/String_id_AtSource: Test
Изменить 21.07.2019
Используя ответ ниже, похоже, это исправлено. но поскольку я добавил в базу данных больше элементов, похоже, она все еще это делает. Итак, в результате дальнейшего тестирования я смогу сказать вам, когда это произойдет.
Все идентификаторы фиксируются правильно, пока вы не прокрутите страницу. Это означает, что, пока все элементы списка помещаются на экране, они возвращают правильный идентификатор, поэтому я подумал, что это исправлено с помощью ответа ниже.
Сначала я установил размер изображения в квадрате 300 dp, поэтому это был большой элемент представления списка, поэтому только 2 элемента щелкают правильно. Изменение размера на 90dp в квадрате позволило разместить 5 элементов.
Идентификаторы элементов списка возвращаются в цикле, начиная с первых 5. Например, щелчок по элементу 6 возвращает идентификатор элемента 0, элемент 7 возвращает идентификатор элемента 1 и так далее. Тем не менее, положение элемента представления списка и всех данных внутри списка правильное.
Все первые страницы работают правильно. Я удалил представление изображения, чтобы попытаться проверить, возможно, изображение слишком велико.
На второй странице все идентификаторы возвращаются в цикле с первой страницы, например. предмет «Марио» возвращает идентификатор Бэтмена, а предмет «Человек-паук» возвращает идентификатор DJ Lama.