Моя функциональность звучит просто.
У меня есть recycler-view
с кучей документов в виде карточек.Когда я нажимаю на элемент, открывается новое действие и показывает мне подробную информацию о документах, таких как заголовок, содержимое и т. Д. Они помещаются в TextInputEditText
, поэтому они доступны для редактирования.Как только пользователь внесет изменения и нажмет кнопку «Назад», документ должен быть обновлен.Звучит просто, правда?Но проблема здесь в том, что, когда я нажимаю кнопку «Назад», действие снова открывается.Документ все еще обновляется, хотя.
Вот мой код NoteListAdapter.java
, который реализует прослушиватель onClick
для элемента recycler-view
.
package com.seeme.Adapters;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.cardview.widget.CardView;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.snackbar.Snackbar;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.EventListener;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.FirebaseFirestoreException;
import com.google.firebase.firestore.QuerySnapshot;
import com.seeme.FirstScreen;
import com.seeme.Model.Note;
import com.seeme.R;
import com.seeme.UpdateNoteActivity;
import org.w3c.dom.Text;
import java.util.List;
import java.util.Random;
import javax.annotation.Nullable;
public class NoteListAdapter extends RecyclerView.Adapter<NoteListAdapter.ViewHolder> {
private Context context;
public List<Note> notes;
private static String TAG = "NoteListAdapter LOG : ";
private FirebaseFirestore mFirestore;
private FirebaseAuth mAuth;
private FirebaseUser mUser;
public String docID;
public NoteListAdapter(List<Note> note) {
this.notes=note;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.note_item, parent, false);
mFirestore = FirebaseFirestore.getInstance();
mAuth = FirebaseAuth.getInstance();
mUser = mAuth.getCurrentUser();
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.title_item.setText(notes.get(position).getTitle());
holder.content_item.setText(notes.get(position).getContent());
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "onClick: OnBindViewHolder + position : " + position);
retrieveDocid(position);
}
});
}
private void retrieveDocid(int itemposition) {
mFirestore.collection("users").document(mUser.getUid()).collection("notes").addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
if (e!=null) {
Log.e(TAG, "onEvent: ", e );
}
else {
docID = queryDocumentSnapshots.getDocuments().get(itemposition).getId();
Log.d(TAG, "onEvent: DOC ID = " + docID);
Intent intent;
intent = new Intent(context, UpdateNoteActivity.class);
intent.putExtra("id", docID);
context.startActivity(intent); }
}
});
}
@Override
public int getItemCount() {
return notes.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
View mView;
public TextView title_item;
public TextView content_item;
public CardView cardView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
mView = itemView;
context = itemView.getContext();
title_item = itemView.findViewById(R.id.item_title);
content_item = itemView.findViewById(R.id.item_content);
cardView = itemView.findViewById(R.id.noteItem_card);
}
}
}
UpdateNoteActivity.java обновляет значение документов.Но, как я уже сказал, когда я нажимаю кнопку, действие возобновляется.В любом случае, чтобы это исправить?
package com.seeme;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.textfield.TextInputEditText;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.EventListener;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.FirebaseFirestoreException;
import java.util.HashMap;
import javax.annotation.Nullable;
import butterknife.BindView;
import butterknife.ButterKnife;
public class UpdateNoteActivity extends AppCompatActivity {
@BindView(R.id.content_editText)
TextInputEditText content_editText;
@BindView(R.id.capture_btn)
FloatingActionButton captureBtn;
@BindView(R.id.title_edittext)
TextInputEditText titleEdittext;
private FirebaseFirestore mFirestore;
private FirebaseAuth mAuth;
private FirebaseUser mUser;
public String documentID;
public static String TAG = "UpdateNoteActivity : ";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_update_note);
ButterKnife.bind(this);
documentID = getIntent().getStringExtra("id");
mFirestore = FirebaseFirestore.getInstance();
mAuth = FirebaseAuth.getInstance();
mUser = mAuth.getCurrentUser();
Toast.makeText(this, "" + documentID, Toast.LENGTH_SHORT).show();
getDocDetails(documentID);
}
@Override
public void onBackPressed() {
// updateNote();
super.onBackPressed();
}
@Override
protected void onPause() {
Toast.makeText(this, "PAUSED", Toast.LENGTH_SHORT).show();
updateNote();
super.onPause();
}
private void updateNote() {
String string_title = titleEdittext.getText().toString();
String string_content = content_editText.getText().toString();
HashMap<String, Object> updateHash = new HashMap<>();
updateHash.put("title", string_title);
updateHash.put("content", string_content);
mFirestore.collection("users").document(mUser.getUid()).collection("notes").document(documentID).update(updateHash)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(UpdateNoteActivity.this, "UPDATED!", Toast.LENGTH_SHORT).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.e(TAG, "onFailure: Update func ERROR", e );
}
});
}
private void getDocDetails(String docID) {
mFirestore.collection("users").document(mUser.getUid()).collection("notes").document(docID).addSnapshotListener(new EventListener<DocumentSnapshot>() {
@Override
public void onEvent(@Nullable DocumentSnapshot documentSnapshot, @Nullable FirebaseFirestoreException e) {
if (e != null) {
Log.e(TAG, "onEvent: ", e);
} else {
String docTitle = documentSnapshot.get("title").toString();
String docContent = documentSnapshot.get("content").toString();
content_editText.setText(docContent);
titleEdittext.setText(docTitle);
Log.d(TAG, "onEvent: Document title = " + docTitle + "\n Document Content = " + docContent);
}
}
});
}
}