所以我的应用程序中有一个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;
}