FrameLayout中Fragment内部的setText()



所以我的应用程序中有一个FrameLayout,其中包含多个片段。我做了一个底部导航,一切都很好,但我需要更新其中一个的TextViews,无论我在网上挖了多远,我都无法让它工作。

我在onCreate中所做的是:(它不会停留在onCreate,这只是为了看看它是否有效(

Fragment fr = new HomeFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.container, fr).commit(); //show the fragment
FragmentManager fm = getSupportFragmentManager();
HomeFragment hfragment = (HomeFragment)fm.findFragmentByTag("HOME");
hfragment.updateMoneyMonth("hello"); //set the text

我的片段是这样的:

private static final String TAG = "HOME";
TextView moneyMonth;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_home,container,false);
Log.d(TAG, "onCreateView: fml ");
moneyMonth = v.findViewById(R.id.moneyThisMonth);
return v;
}
void updateMoneyMonth(String text){
moneyMonth.setText(text);
}

我不知道哪里出了问题,因为我看过的很多教程都是这样做的。我还看到很多人使用id而不是标签,我如何将id添加到片段中?当它在FrameLayout中时?

很抱歉,如果这看起来有点愚蠢,或者只是解决方案非常简单,对碎片来说非常新。

您需要将数据传递到要在Textview 上显示的片段

Fragment fr = new HomeFragment();
Bundle args = new Bundle();
args.putString("YourKey", "YourValue");
fr.setArguments(args);
getSupportFragmentManager().beginTransaction().replace(R.id.container,fr).commit(); 

在Fragment的onCreateView方法中,从Bundle中获取字符串,并设置为TextView,如下所示-

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup 
container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_home,container,false);
String value = getArguments().getString("YourKey");
moneyMonth = v.findViewById(R.id.moneyThisMonth);
moneyMonth.setText(value);
return v;
}

最新更新