我不确定如何解决这个问题。我有一个 TextView(包含在 fragment 中),它需要保存来自 firebase 的数据(来自 MainActivity 中包含的监听器)。我编写 Java 的时间不长,所以我想知道除了将 textview 设为静态(因为这是不好的做法)之外,我还有什么选择?
下面是MainActivity的onCreate中调用的;
private void getExtras(String uid) {
mFirebaseRef.child("users").child(uid).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
User user = dataSnapshot.getValue(User.class);
System.out.println(TAG + "TEST: " + user.getUsername());
CURRENT_USER.setSex(user.getSex());
CURRENT_USER.setEmail(user.getEmail());
CURRENT_USER.setAge(user.getAge());
CURRENT_USER.setUsername(user.getUsername());
CURRENT_USER.setCreatedTime(user.getCreatedTime());
Log.e(TAG, "Logged user is "+ CURRENT_USER.getId());
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
下面是我 fragment 的onViewCreated:
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
tvUserTitle = (TextView) getView().findViewById(R.id.tvUserTitle);
tvUserTitle.setText(MainScreen.CURRENT_USER.getUsername());
}
如您所见, fragment 是在设置变量之前创建的,因此它显示为空白(null)。
最佳答案
您需要从 MainActivity 获取对 Fragment 的引用,然后调用一个方法来设置 TextView 文本。
在你的 MainActivity
回调中
CustomFragment customFragment =(CustomFragment)getSupportFragmentManager().findFragmentById(R.id.custom_frag_id);
customFragment.setTextView(firebaseText);
在你的 CustomFragment
类中
public void setTextView(String text){
myTextView.setText(text);
}
关于android - 数据库调用后如何设置文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38621738/