# #java #android #firebase #firebase-realtime-database #android-recyclerview
Вопрос:
когда я пытаюсь очистить список массивов, но он показывает только последний элемент в представлении переработчика, и все элементы ясны, и когда я не могу использовать clear, он показывает несколько одинаковых элементов в представлении переработчика.
package com.example.flashchat2.fragment;
public class ChatFragment extends Fragment {
public ChatFragment(){}
FragmentChatBinding binding;
FirebaseDatabase database;
UsersAdapter muserlistAdapter;
ArrayList<Users> contactlist,userlist;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable
Bundle savedInstanceState) {
binding=FragmentChatBinding.inflate(getLayoutInflater());
database = FirebaseDatabase.getInstance();
contactlist=new ArrayList<>();
userlist=new ArrayList<>();
initializeRecyclerView();
getContactList();
return binding.getRoot();
}
//Где я получаю список контактов с телефона пользователя
private void getContactList(){
String ISOPrefix = getCountryISO();
ContentResolver cr=getContext().getContentResolver();
Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null,
null);
try {
contactlist.clear();
while (phones.moveToNext()) {
String name = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phone = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
phone = phone.replace(" ", "");
phone = phone.replace("-", "");
phone = phone.replace("(", "");
phone = phone.replace(")", "");
if (!String.valueOf(phone.charAt(0)).equals(" "))
phone = ISOPrefix phone;
Users users = new Users();
users.setName(name);
users.setPhoneNumber(phone);
contactlist.add(users);
muserlistAdapter.notifyDataSetChanged();
getUserDetails(users);
}
} catch (Exception e) {
e.printStackTrace();
}
phones.close();
}
//здесь мы можем сопоставить контакт пользователя с контактом пользователя firebase и показать только те контакты, которые доступны в телефонных контактах пользователей
private void getUserDetails(Users users) {
DatabaseReference mUserDB = FirebaseDatabase.getInstance().getReference().child("Users");
Query query = mUserDB.orderByChild("phoneNumber").equalTo(users.getPhoneNumber());
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
String phone = "",
name = "";
//when i try to clear my arraylist but he show only last item in recycler view?
//userlist.clear();
try {
for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
if (childSnapshot.child("phoneNumber").getValue() != null)
phone = childSnapshot.child("phoneNumber").getValue().toString();
if (childSnapshot.child("name").getValue() != null) {
name = childSnapshot.child("name").getValue().toString();
}
String image = childSnapshot.child("profileImage").getValue().toString();
Users mUser = new Users();
mUser.setUid(childSnapshot.getKey());
mUser.setName(name);
mUser.setPhoneNumber(phone);
mUser.setProfileImage(image);
if (name.equals(phone))
for (Users mContactIterator : contactlist) {
if (mContactIterator.getPhoneNumber().equals(mUser.getPhoneNumber())) {
mUser.setName(mContactIterator.getName());
}
}
if (!phone.equals(FirebaseAuth.getInstance().getCurrentUser().getPhoneNumber()))
userlist.add(mUser);
muserlistAdapter.notifyDataSetChanged();
return;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
private String getCountryISO(){
String iso = null;
getContext();
TelephonyManager telephonyManager = (TelephonyManager) getContext().getSystemService(Context.TELEPHONY_SERVICE);
if(telephonyManager.getNetworkCountryIso()!=null)
if (!telephonyManager.getNetworkCountryIso().toString().equals(""))
iso = telephonyManager.getNetworkCountryIso().toString();
return CountryToPhonePrefix.getPhone(iso);
}
private void initializeRecyclerView() {
binding.chatRecyclerview.setNestedScrollingEnabled(false);
binding.chatRecyclerview.setHasFixedSize(false);
LinearLayoutManager layoutManager=new LinearLayoutManager(getContext());
binding.chatRecyclerview.setLayoutManager(layoutManager);
muserlistAdapter = new UsersAdapter(getContext(),userlist);
binding.chatRecyclerview.setAdapter(muserlistAdapter);
}
}