[英]how to paginate data in viewModel with recycler view in fragment using firestore
[英]Using Firestore callback in another fragment
我试图将我的代码分成类似 MVC 的部分。 我有一个片段,我想在其中显示从 Firestore 获取的用户名。 我还有一个 class (HomeController),我把逻辑放在那里。 在这个 class 中,我尝试实现一种从文档中获取用户名的方法。
家庭控制器
public void getWelcomeNameText(final getNameCallback callback) {
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
welcomeName = document.getString("clientName");
}
}
callback.onCallback(welcomeName);
}
});
}
我正在使用回调接口。
public interface getNameCallback {
void onCallback(String name);
}
同样在构造函数中,我调用了上面的方法。
public HomeController() {
fAuth = FirebaseAuth.getInstance();
fStore = FirebaseFirestore.getInstance();
userID = fAuth.getUid();
docRef = fStore.collection("Clients").document(userID);
activeJobRef = fStore.collection("ActiveJobs");
getWelcomeNameText(new getNameCallback() {
@Override
public void onCallback(String name) {
welcomeName = name;
//I want to pass this welcomeName to HomeFragment
}
});
}
这完美地获取了用户名,但我想在我的片段中使用这个名为 HomeFragment 的方法来设置 TextView 的文本。所以实际上我想传递welcomeName变量。 但实际上我不知道该怎么做。 我在片段中实现了getNameCallback 。
主页片段
public class HomeFragment extends Fragment implements HomeController.getNameCallback, View.OnClickListener {
//variables
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
getActivity().getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
View view = inflater.inflate(R.layout.fragment_home, container, false);
postJob = view.findViewById(R.id.button_add_job);
logout = view.findViewById(R.id.button_sign_out);
bottomNav = getActivity().findViewById(R.id.bottom_nav);
bottomNav.setVisibility(View.VISIBLE);
loginName = view.findViewById(R.id.textView_login_name);
noDataText = view.findViewById(R.id.textView_no_active_job);
homeController = new HomeController();
//here I want something like: loginName.setText(userNameFromCallback);
return view;
}
@Override
public void onCallback(String name) {
//maybe I have to do something here?
}
感谢阅读这个 - 可能是一个非常业余的 - 问题!
找到了解决方案,我知道这是一个菜鸟问题 :) 我刚刚打电话给:
homeController.getWelcomeNameText(new HomeController.getNameCallback() {
@Override
public void onCallback(String name) {
loginName.setText(name);
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.