Получение идентификатора поста из RecyclerView - PullRequest
0 голосов
/ 06 апреля 2019

Я пытаюсь получить его, поэтому, когда пользователь нажимает на сообщение из RecyclerView, я могу получить идентификатор записи, за которой я слежу CodinginFlows видео о том, как это сделать, но когда я получаю getSnapshot() У меня нет возможности его использовать

Я посмотрел на docs и он говорит, что интерфейс устарел. Я не уверен, относится ли это ко всему этомуили просто что-то конкретное.

Я использую Cloud Firestore, иду ли я по этому пути правильно или я ухожу?

фрагмент

    @SuppressLint("ResourceType")
    public ViewHolder(final View itemView) {

       super(itemView);
       mView = itemView;
       parentLayout = itemView.findViewById(R.id.Main_Blog_Post);

       itemView.setOnClickListener(new View.OnClickListener() {

           @Override
           public void onClick(View view) {

                int position = getAdapterPosition();

                String id = documentSnapshot.getId();
                DocumentReference docRef = db.collection("Posts").document(id);
                String postID = docRef.toString();
                Toast.makeText(mContext,postID,Toast.LENGTH_SHORT).show();

                if (position != RecyclerView.NO_POSITION && listner != null){

                    listner.onItemClick(get);
                }

            }
        });

    }

Полный код при необходимости

public class BlogRecyclerAdapter extends RecyclerView.Adapter<BlogRecyclerAdapter.ViewHolder> {

private OnItemClickListner listner;

public List<BlogPost> blog_list;

private FirebaseFirestore firebaseFirestore;
private FirebaseDatabase firebaseDatabase;
private FirebaseFirestore db = FirebaseFirestore.getInstance();

private DatabaseReference mUserDatabase;
private FirebaseUser mCurrentUser;

private Context mContext;

public BlogRecyclerAdapter(Context context, List<BlogPost> blog_list) {
    mContext = context;
    this.blog_list = blog_list;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.blog_list_item, parent, false);
    firebaseFirestore = FirebaseFirestore.getInstance();
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {

    CollectionReference mUsersDB = db.collection("Posts");


    String desc_data = blog_list.get(position).getDesc();
    holder.setDescText(desc_data);

    String image_url = blog_list.get(position).getImage_url();
    holder.setBlogImage(image_url);

    long millisecond = blog_list.get(position).getTimestamp().getTime();
    String dateString = DateFormat.format("MM/dd/yyyy", new Date(millisecond)).toString();
    holder.setTime(dateString);

    holder.parentLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent intent = new Intent(mContext, Confirmation_Activity.class);
            mContext.startActivity(intent);
        }
    });

}

@Override
public int getItemCount() {
    return blog_list.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {

    public Context mContext;
    ConstraintLayout parentLayout;
    private View mView;
    private TextView descView;
    private ImageView blogPostView;
    private TextView blogDate;
    private TextView blogUserName;
    private CircleImageView blogUserImage;
    private StorageReference mImageStorage;
    private DocumentSnapshot documentSnapshot;

    @SuppressLint("ResourceType")
    public ViewHolder(final View itemView) {
        super(itemView);
        mView = itemView;
        parentLayout = itemView.findViewById(R.id.Main_Blog_Post);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int position = getAdapterPosition();

                String id = documentSnapshot.getId();
                DocumentReference docRef = db.collection("Posts").document(id);
                String postID = docRef.toString();
                Toast.makeText(mContext,postID,Toast.LENGTH_SHORT).show();

                if (position != RecyclerView.NO_POSITION && listner != null){

                    listner.onItemClick(get);
                }

            }
        });

    }


    public void setDescText(String descText) {
        descView = mView.findViewById(R.id.blog_desc);
        descView.setText(descText);

    }

    public void setUserData(String downloadUrl, String name) {

        mImageStorage = FirebaseStorage.getInstance().getReference();

        mCurrentUser = FirebaseAuth.getInstance().getCurrentUser();
        final String current_uid = mCurrentUser.getUid();

        mUserDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(current_uid);
        mUserDatabase.keepSynced(true);

        mUserDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                String name = Objects.requireNonNull(dataSnapshot.child("name").getValue()).toString();

                StorageReference filepath = mImageStorage.child("profile_images").child(current_uid + (".jpeg"));
                Log.d("heere", "S");

                // This gets the download url async
                filepath.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {

                        //The download url
                        final String downloadUrl =
                                uri.toString();
                        Log.d("tag", downloadUrl);
                        if (!downloadUrl.equals("default")) {

                            //  Glide.with(getApplicationContext()).load(downloadUrl).into(mDisplayImage);
                            Glide.with(itemView.getContext()).load(downloadUrl).into(blogUserImage);

                        }
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        // Toast.makeText(getApplicationContext(), "Something went wrong", Toast.LENGTH_SHORT).show();
                    }
                });
                //Toast.makeText(getApplicationContext(), image, Toast.LENGTH_SHORT).show();

                Log.d("value", dataSnapshot.getValue().toString());
                Log.d("key", dataSnapshot.getKey());
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });


    }

    public void setTime(String date) {

        blogDate = mView.findViewById(R.id.blog_date);
        blogDate.setText(date);

    }

    public void setBlogImage(final String downloadUri) {

        blogPostView = mView.findViewById(R.id.blog_image);
        Glide.with(itemView.getContext()).load(downloadUri).into(blogPostView);


    }
}

public interface OnItemClickListner{
    void onItemClick(DocumentSnapshot documentSnapshot, int position);

}

public void setOnItemClickListner(OnItemClickListner listner){
    this.listner = listner;

}
}

db

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Почему вы говорите, что getSnapshot() метод устарел, потому что это не так, Snapshots.OpenSnapshotResult интерфейс. Чтобы иметь возможность получить идентификатор искомого документа, ваш класс адаптера должен расширять класс FirestoreRecyclerAdapter. Таким образом, в этом случае, чтобы получить идентификатор документа, вы, безусловно, можете использовать метод getSnapshots(), как показано в следующих строках кода:

@Override
protected void onBindViewHolder(@NonNull ProductViewHolder holder, int position, @NonNull YourModelClass yourModelClass) {
    String id = getSnapshots().getSnapshot(position).getId();
}
0 голосов
/ 06 апреля 2019

Хотя вы не очень знакомы с устаревшим методом getSnapshot(), вы можете получить идентификатор ссылки на документ, добавив его в качестве поля при первоначальном добавлении публикации в базу данных.

например,

 DocumentReference documentReference =  firebaseFirestore.collection("Posts").document();//generate the random blog_id here
    Map<String, Object> postMap = new HashMap<>(); //hashmap do add files to your db
    postMap.put("image_url", image);
    postMap.put("desc", companyName);
    postMap.put("blog_id", documentReference.getId());
    //add the rest of the document here
    documentReference.set(postMap).addOnCompleteListener....

documentReference.getId() получит идентификатор вашего блога в виде строки, и вы добавите его в базу данных с ключом blog_id

Затем вам нужно будет обновить класс модели BlogPost, чтобы иметь переменную blog_id.так же, как у вас уже есть или описание и URL-адрес изображения.

Затем внутри вашего адаптера утилизатора внутри onBindViewHolder

String blog_id = blog_list.get(position).getBlog_id();

Теперь у вас есть blog_id в строке и вы можете передать его в любое место.

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