Android 如何从活动更新片段文本视图?
如果我有一个函数,它会不时地获取不同的值,并且使用片段作为显示,我想随着值的变化更新片段内的TextView,那么我如何从MainActivity内的片段操作TextView 要进一步澄清: My Main Activity将DatabaseReference中的值定义如下:Android 如何从活动更新片段文本视图?,android,android-fragments,Android,Android Fragments,如果我有一个函数,它会不时地获取不同的值,并且使用片段作为显示,我想随着值的变化更新片段内的TextView,那么我如何从MainActivity内的片段操作TextView 要进一步澄清: My Main Activity将DatabaseReference中的值定义如下: userLoggedInRef.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@No
userLoggedInRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
if (!dataSnapshot.child("office").getValue(String.class).equals("none")) {
officeKeyLoggedIn = dataSnapshot.child("office").getValue(String.class);
usersInOffice.child(officeKeyLoggedIn).child(userKey).setValue("").addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()){
/new-code/
}
}
});
}
...
userLoggedInRef.addValueEventListener(新的ValueEventListener(){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
if(dataSnapshot.exists()){
如果(!dataSnapshot.child(“office”).getValue(String.class).equals(“none”)){
officeKeyLoggedIn=dataSnapshot.child(“office”).getValue(String.class);
usersInOffice.child(officeKeyLoggedIn).child(userKey.setValue(“”)addOnCompleteListener(新OnCompleteListener(){
@凌驾
未完成的公共void(@NonNull任务){
if(task.issusccessful()){
/新代码/
}
}
});
}
...
因此,当用户进入办公室,值从“无”变为“/officeKey/”时,这里是一个条件,此时我想调用“/new code/”片段,它是MainActivity的显示,将隐藏文本视图的可见性设置为可见,并将其文本设置为通知用户他现在已登录的内容
我怎样才能做到这一点
EDIT1:在您的活动中
您必须初始化此片段(例如,作为字段):
记住在事务中使用这个实例(使用FragmentManager
)
片段:
接下来,在片段中,您可以创建接收数据的新方法:
public class OwnFragment extends Fragment {
// So you can pass there: View.VISIBLE, View.GONE or View.INVISIBLE
void setVisibility(int visibility) {
textView.setVisibility(visibility);
}
// Your new method
void setNewText(String text) {
textView.setText(text);
}
}
再次在活动中:
您可以使用上述片段实例调用此方法:
fragment.setNewText("Hello world");
在你的活动中
您必须初始化此片段(例如,作为字段):
记住在事务中使用这个实例(使用FragmentManager
)
片段:
接下来,在片段中,您可以创建接收数据的新方法:
public class OwnFragment extends Fragment {
// So you can pass there: View.VISIBLE, View.GONE or View.INVISIBLE
void setVisibility(int visibility) {
textView.setVisibility(visibility);
}
// Your new method
void setNewText(String text) {
textView.setText(text);
}
}
再次在活动中:
您可以使用上述片段实例调用此方法:
fragment.setNewText("Hello world");
将此逻辑移动到共享ViewModel,这是您可以在作为解决方案提供的代码中看到的,这样您就不必再关心它是活动还是片段,因为它将通过Observer共享给这两者pattern@on-我的开发生活之路你想把数据从一个活动传递到另一个片段吗?@Boken不,我想从活动中的片段操作文本视图
textview
位于activity
中。是否要从fragment
设置文本(在此textview
),对吗?@EpicPandaForce我稍后会检查您的答案,现在我没有时间实施(我也会删除此选项)将此逻辑移动到共享ViewModel,这是您可以在作为解决方案提供的代码中看到的,这样您就不必再关心它是活动还是片段,因为它将通过Observer共享给这两者pattern@on-我的开发生活之路你想把数据从一个活动传递到另一个片段吗?@Boken不,我想从活动中的片段操作文本视图textview
位于activity
中。是否要从fragment
设置文本(在此textview
),对吗?@EpicPandaForce我稍后会检查您的答案,现在我没有时间实施(我也会删除此内容)Boken,它给出了错误“尝试在空对象引用上调用虚拟方法'void android.widget.TextView.setVisibility(int)'”片段中的函数是public void setTxtOfficeLoggedIn(String officeName){txtOfficeLoggedIn.setVisibility(View.VISIBLE);txtOfficeLoggedIn.setText(“Vocêestálogado em:+officeName);}即使第一行(txtOfficeLoggedIn.setVisibility(…)被注释,错误也会显示null object reference
您是否使用相同的片段?您是否会修改您的问题并添加活动的代码(与fragmentManager
一起)和片段?您是否忘记提到“TextView TextView-(TextView)findViewbyId?”(R.id.);“?Boken,它给出的错误是“试图在空对象引用上调用虚拟方法'void android.widget.TextView.setVisibility(int)'”片段中的函数是public void setTxtOfficeLoggedIn(String officeName){txtOfficeLoggedIn.setVisibility(View.VISIBLE);txtOfficeLoggedIn.setText(”Vocêestálogado em:“+officeName);}即使第一行(txtOfficeLoggedIn.setVisibility(…))被注释,错误也会说null对象引用
您使用的是同一个片段吗?您会修改您的问题并添加活动的代码(与fragmentManager
一起)和片段吗?您忘了提及吗?”TextView TextView-(TextView)findViewbyId(R.id.);“?