У меня есть RecyclerView, в котором показан элемент, который при щелчке должен запускать другое действие, однако при нажатии на этот элемент открывается действие, к которому оно должно go, но над этим же действием оно создается и накладывает то же действие с тем же объектом RecyclerView, вызывающим невозможность выхода из этого действия, поскольку, несмотря на тот факт, что он возвращается для привлечения с помощью кнопки «назад», действие с RecyclerView создается снова и снова бесконечно l oop Как я могу решить что?
Обновление:
Я понял, что вышеупомянутая проблема возникает только тогда, когда это действие выполняется специально с другими.
действие с RecyclerView:
SolicitudMessages extends AppCompatActivity {
FirebaseDatabase firebaseDatabase;
DatabaseReference databaseReference ;
FirebaseAuth mAuth;
FirebaseUser currentUsers;
CircleImageView Profile;
RecyclerView postRecyclerView ;
ArrayList<User> postList;
UserMessagesAdapter postAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_solis);
firebaseDatabase = FirebaseDatabase.getInstance();
mAuth = FirebaseAuth.getInstance();
currentUsers = mAuth.getCurrentUser();
databaseReference = firebaseDatabase.getReference("Users");
postRecyclerView = findViewById(R.id.rvPlumerr);
postList = new ArrayList<>();
Profile = findViewById(R.id.profileIMGSearch);
}
@Override
public void onStart() {
super.onStart();
postRecyclerView.setLayoutManager(new LinearLayoutManager(this));
postRecyclerView.setAdapter( postAdapter );
final FirebaseUser fuser = FirebaseAuth.getInstance().getCurrentUser();
// Get List Posts from the database
final String postUsername = Objects.requireNonNull(getIntent().getExtras()).getString("userName");
System.out.println(postUsername + "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
DatabaseReference databaseReference =FirebaseDatabase.getInstance().getReference("Users");
Query query=databaseReference.orderByChild("username").equalTo(postUsername);
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
postList = new ArrayList<>();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
User user = snapshot.getValue(User.class);
assert user != null;
assert fuser != null;
if (!user.getId().equals(fuser.getUid())) {
postList.add(user);
}
}
postAdapter = new UserMessagesAdapter(getApplicationContext(),postList, false);
postRecyclerView.setAdapter(postAdapter);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
}
**Adapter OnClick:**
@Override
public void onClick(View view) {
Intent d = new Intent(mContext, MessageActivity.class);
d.putExtra("userid", user.getId());
d.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
d.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(d);
Активность, которую необходимо выполнить:
MessageActivity extends AppCompatActivity {
CircleImageView profile_image;
TextView username;
FirebaseUser fuser;
DatabaseReference reference;
ImageButton atrass;
ImageButton btn_send;
EditText text_send;
MessageAdapter messageAdapter;
List<Chat> mchat;
RecyclerView recyclerView;
Intent intent;
ValueEventListener seenListener;
String userid;
APIService apiService;
boolean notify = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_message);
apiService = Client.getClient("https://fcm.googleapis.com/").create(APIService.class);
recyclerView = findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext());
linearLayoutManager.setStackFromEnd(true);
recyclerView.setLayoutManager(linearLayoutManager);
profile_image = findViewById(R.id.profile_image);
username = findViewById(R.id.username);
btn_send = findViewById(R.id.btn_send);
text_send = findViewById(R.id.text_send);
atrass = findViewById(R.id.atras);
intent = getIntent();
userid = intent.getStringExtra("userid");
fuser = FirebaseAuth.getInstance().getCurrentUser();
btn_send.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
notify = true;
String msg = text_send.getText().toString();
if (!msg.equals("")){
sendMessage(fuser.getUid(), userid, msg);
} else {
Toast.makeText(MessageActivity.this, "No puedes enviar un mensaje vacio", Toast.LENGTH_SHORT).show();
}
text_send.setText("");
}
});
atrass.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent myIntent = new Intent(MessageActivity.this, WelcomeActivity.class);
// MessageActivity.this.startActivity(myIntent);
// finish();
}
});
reference = FirebaseDatabase.getInstance().getReference("Users").child(userid);
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
assert user != null;
username.setText(Objects.requireNonNull(user).getUsername());
if (user.getImageURL().equals("default")){
profile_image.setImageResource(R.mipmap.ic_launcher);
} else {
//and this
Glide.with(getApplicationContext()).load(user.getImageURL()).into(profile_image);
}
readMesagges(fuser.getUid(), userid, user.getImageURL());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
seenMessage(userid);
}
private void seenMessage(final String userid){
reference = FirebaseDatabase.getInstance().getReference("Chats");
seenListener = reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()){
Chat chat = snapshot.getValue(Chat.class);
assert chat != null;
if (chat.getReceiver().equals(fuser.getUid()) && chat.getSender().equals(userid)){
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("isseen", true);
snapshot.getRef().updateChildren(hashMap);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void sendMessage(String sender, final String receiver, String message){
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("sender", sender);
hashMap.put("receiver", receiver);
hashMap.put("message", message);
hashMap.put("isseen", false);
reference.child("Chats").push().setValue(hashMap);
// add user to chat fragment
final DatabaseReference chatRef = FirebaseDatabase.getInstance().getReference("Chatlist")
.child(fuser.getUid())
.child(userid);
chatRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (!dataSnapshot.exists()){
chatRef.child("id").setValue(userid);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
final DatabaseReference chatRefReceiver = FirebaseDatabase.getInstance().getReference("Chatlist")
.child(userid)
.child(fuser.getUid());
chatRefReceiver.child("id").setValue(fuser.getUid());
final String msg = message;
reference = FirebaseDatabase.getInstance().getReference("Users").child(fuser.getUid());
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
assert !notify || user != null;
notify = false;
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void sendNotifiaction(String receiver, final String username, final String message){
DatabaseReference tokens = FirebaseDatabase.getInstance().getReference("Tokens");
Query query = tokens.orderByKey().equalTo(receiver);
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot snapshot : dataSnapshot.getChildren()){
Token token = snapshot.getValue(Token.class);
Data data = new Data(fuser.getUid(), R.mipmap.ic_launcher, username+": "+message, "New Message",
userid);
assert token != null;
Sender sender = new Sender(data, token.getToken());
apiService.sendNotification(sender)
.enqueue(new Callback<MyResponse>() {
@Override
public void onResponse(@NotNull Call<MyResponse> call, @NotNull Response<MyResponse> response) {
if (response.code() == 200){
assert response.body() != null;
if (Objects.requireNonNull(response.body()).success != 1){
Toast.makeText(MessageActivity.this, "Failed! ", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onFailure(@NotNull Call<MyResponse> call, @NotNull Throwable t) {
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void readMesagges(final String myid, final String userid, final String imageurl){
mchat = new ArrayList<>();
reference = FirebaseDatabase.getInstance().getReference("Chats");
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
mchat.clear();
for (DataSnapshot snapshot : dataSnapshot.getChildren()){
Chat chat = snapshot.getValue(Chat.class);
assert chat != null;
if (chat.getReceiver().equals(myid) && chat.getSender().equals(userid) ||
chat.getReceiver().equals(userid) && chat.getSender().equals(myid)){
mchat.add(chat);
}
messageAdapter = new MessageAdapter(MessageActivity.this, mchat, imageurl);
recyclerView.setAdapter(messageAdapter);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private void currentUser(String userid){
SharedPreferences.Editor editor = getSharedPreferences("PREFS", MODE_PRIVATE).edit();
editor.putString("currentuser", userid);
editor.apply();
}
private void status(String status){
reference = FirebaseDatabase.getInstance().getReference("Users").child(fuser.getUid());
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("status", status);
reference.updateChildren(hashMap);
}
@Override
protected void onResume() {
super.onResume();
status("online");
currentUser(userid);
}
@Override
protected void onPause() {
super.onPause();
reference.removeEventListener(seenListener);
status("offline");
currentUser("none");
}
}