Как получить указанный c идентификатор документа на itemclickviewlistener из firebase - PullRequest
1 голос
/ 11 февраля 2020
fgboys.whereEqualTo("date", date)
                    .get()
                    .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
                        @Override
                        public void onSuccess(final QuerySnapshot queryDocumentSnapshots) {

                             String data="";


                            if(tvDate.getText().toString().isEmpty()){
                                Toast.makeText(ProgramToProgram.this, "Please select date", Toast.LENGTH_SHORT).show();
                            }

                            else{

                                for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
                                    PID = documentSnapshot.getId().toString().trim();
                                    String temp = documentSnapshot.get("session").toString();



                                    data = "\nPID: "+ PID +"\n" + "session: "+ temp+"\n";

                                    arrayList.add(data);
                                    arrayAdapter.notifyDataSetChanged();


                                }

Я хочу получить идентификатор документа этого указанного c документа, который я нажимаю

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {


        fgboys.get()
            .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
                @Override
                public void onSuccess(QuerySnapshot queryDocumentSnapshots) {


                    for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
                        pid = documentSnapshot.getId().toString().trim();
                    }
 Toast.makeText(ProgramToProgram.this, " pid:" + pid, Toast.LENGTH_SHORT).show();

                }
            });
    }
});

Это то, что я пробовал, но при нажатии на любой элемент возвращается только один указанный c id

поэтому моя структура базы данных выглядит следующим образом: Collection - ProgramDetails, и в этой коллекции у меня есть много документов, которые имеют автоматически сгенерированные идентификаторы, и этот идентификатор документа - то, что я хочу

fgboys - это где я вызвали коллекцию ProgramDetails

1 Ответ

0 голосов
/ 11 февраля 2020

Вы запрашиваете только одно местоположение базы данных ( fgboys ) при каждом щелчке элемента, плюс значение переменной pid перезаписывается на l oop, поэтому каждый раз, когда вы получаете идентификатор последнего документа в списке.

Вы можете сохранить список documentId в отдельном списке и получить идентификатор выбранного элемента списка.

 private List<String> docIds=new ArrayList<>(); //declare id list
        fgboys.whereEqualTo("date", date)
                .get()
                .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
                    @Override
                    public void onSuccess(final QuerySnapshot queryDocumentSnapshots) {




                        if(tvDate.getText().toString().isEmpty()){
                            Toast.makeText(ProgramToProgram.this, "Please select date", Toast.LENGTH_SHORT).show();
                        }

                        else{
                            docIds.clear();
                            for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
                                String data="";
                                PID = documentSnapshot.getId().toString().trim();
                                docIds.add(PID);
                                String temp = documentSnapshot.get("session").toString();



                                data = "\nPID: "+ PID +"\n" + "session: "+ temp+"\n";

                                arrayList.add(data);
                                arrayAdapter.notifyDataSetChanged();


                            }

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {


       pid=docIds.get(position);
 Toast.makeText(ProgramToProgram.this, " pid:" + pid, Toast.LENGTH_SHORT).show();

    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...