#android #firebase #firebase-realtime-database #firebaseui
#Android #firebase #firebase-база данных в реальном времени #firebaseui
Вопрос:
У меня есть база данных Firebase, которую я push()
использую для добавления записей в базу данных, генерируя таким образом случайный ключ в качестве ссылки для каждой записи.
В части приложения я использую FirebaseListAdapter для заполнения некоторых записей базы данных в виде списка. Затем я реализую setOnItemClickListener
свой список. Что я хочу здесь сделать, так это вернуть ссылку для каждой записи, на которую я нажимаю.
//Firebase DB setup
mDatabaseStolen = FirebaseDatabase.getInstance().getReference().child(testing);
myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
DatabaseReference itemRef = mDatabaseStolen.getRef();
Toast toast = Toast.makeText(getActivity().getApplicationContext(), itemRef.getKey(), Toast.LENGTH_SHORT);
toast.show();
}
});
Здесь обрабатывается нажатие:
mDatabase.child("testing").push().setValue(newBike);
Данные Firebase:
"testing" : {
"-KTA7xijNrK1SK98rZns" : {
"color" : "Rjfu",
"frameSize" : 0,
"make" : "Ggg",
"other" : "Xhfhf",
"stolen" : false
},
"-KTABiJuH2-RXwmp0Rcu" : {
"color" : "Red",
"frameSize" : 0,
"make" : "Test ",
"other" : "No",
"stolen" : false
}
Поэтому, когда я нажимаю на элемент в списке, я хочу вернуть ссылку KTA7xijNrK1SK98rZns
или что бы это ни было. В тосте в первом фрагменте кода все, что я возвращаю, — это testing
строка в каждом щелчке родительской ссылки.
Любая помощь приветствуется.
Ответ №1:
Вы говорите, что у вас есть FirebaseListAdapter
. Если это так, вы можете получить ссылку на определенный элемент в позиции с adapter.getRef()
помощью .
myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
DatabaseReference itemRef = adapter.getRef(position);
Toast toast = Toast.makeText(getActivity().getApplicationContext(), itemRef.getKey(), Toast.LENGTH_SHORT);
toast.show();
}
});
Комментарии:
1. Я использую пользовательский адаптер arraylist, что мне следует сделать, чтобы добиться того же, что и выше??
2. Привет, я использовал приведенный выше код, но получил эту ошибку
Variable 'adapter' is accessed from within inner class, needs to be declared final
, но когда я сделал adapter final, вместо этого я получил ошибкуerror: incompatible types: String cannot be converted to DatabaseReference
3. Хороший улов, правильный метод
getRef
. Я обновил код в ответе.