У меня есть свой собственный адаптер (работает отлично), и он создается следующим образом:
public class myOwnAdapter extends RecyclerView.Adapter<myOwnAdapter.ViewHolder> {
private ArrayList<itemList> ListOfUsers;
private ItemClickListener mClickListener;
public myOwnAdapter(ArrayList<itemList> exampleList) {
ListOfUsers = exampleList;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view, parent, false);
ViewHolder theViewHolder = new ViewHolder(view);
return theViewHolder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
itemList UserInfo = ListOfUsers.get(position);
holder.mTextView1.setText(UserInfo.getNamee());
holder.mTextView2.setText(UserInfo.getEmaill());
holder.mTextView3.setText(String.valueOf(UserInfo.getAge()));
}
@Override
public int getItemCount() {
return ListOfUsers.size();
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView mTextView1;
public TextView mTextView2;
public TextView mTextView3;
public ViewHolder(View itemView) {
super(itemView);
mTextView1 = itemView.findViewById(R.id.textView);
mTextView2 = itemView.findViewById(R.id.textView2);
mTextView3 = itemView.findViewById(R.id.textView3);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition());
}
}
public itemList getItem(int id) {
return ListOfUsers.get(id);
}
public void setClickListener(myOwnAdapter.ItemClickListener itemClickListener) {
this.mClickListener = itemClickListener;
}
public interface ItemClickListener {
void onItemClick(View view, int position);
}
}
А вот мой класс itemList (который я хочу заменить):
public class itemList {
private String Namee;
private String Emaill;
private int Age;
public itemList(String name, String mail, int age) {
Namee = name;
Emaill = mail;
Age = age;
}
public String getNamee() {
return Namee;
}
public String getEmaill() {
return Emaill;
}
public int getAge() {
return Age;
}
}
А в mainActivity я могу просто создать нового пользователя, такого как этот, и затем он добавляется к адаптеру recyclerview:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ArrayList<itemList> listOfUsers = new ArrayList<>();
listOfUsers.add(new itemList("Tim", "Tim@hotmail.com", 2));
mRecyclerView = findViewById(R.id.recyclerViewAKAvinduetHvorListaVises);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(this);
mAdapter = new myOwnAdapter(listOfUsers);
mRecyclerView.setLayoutManager(mLayoutManager);
mAdapter.setClickListener(this);
mRecyclerView.setAdapter(mAdapter);
}
Хорошо, так что сейчас я в основном хочу заменить класс itemList на мой собственный FireBaseclass (который работает, когда я получаю одного пользователя), но я хочу иметь возможность извлекать всех пользователей, чтобы показать имя, электронную почту, возраст и т. д. c. Мой класс Firebase уже расширяет класс FirebaseUserRegistration.class, который дополнительно расширяет класс UserClass (работает так же, как itemList).
Вот мой код, как я использую его для сбора информации о пользователе для пользователя:
public class FirebaseDataCollection extends FirebaseRegistration {
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference databaseReference = database.getReference();
public void getUserDetails() {
final String user = FirebaseAuth.getInstance().getCurrentUser().getPhoneNumber(); //this is gonna be removed right?
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference additionalUserInfoRef = rootRef.child("Users");
Query userQuery = additionalUserInfoRef.orderByKey().equalTo(user); // this is gonna be removed right?
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
Map<String, Object> map = new HashMap<>();
String nameOfUser = ds.child("name").getValue(String.class);
int ageOfUser = ds.child("age").getValue(int.class);
String emailOfUser = ds.child("e-mail").getValue(String.class);
setEmail(emailOfUser);
setName(nameOfUser);
setAge(ageOfUser);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Toast.makeText(mActivity, "Something went wrong..", Toast.LENGTH_SHORT).show(); // this works perfectly. why?
}
};
userQuery.addListenerForSingleValueEvent(valueEventListener);
}
}
Я знаю, что это должно быть легко реализовать на моем адаптере, но я изо всех сил и не могу решить это .. кто-то может мне помочь?