gpt4 book ai didi

java - 从 Fragment 中调用 MainActivity 中的方法

转载 作者:太空宇宙 更新时间:2023-11-04 11:41:47 26 4
gpt4 key购买 nike

我有 MainActivty 类和 DrawerLayout,因此我动态添加 Fragments

public void selectDrawerItem(MenuItem menuItem) {
Fragment fragment = null;
Class fragmentClass;
switch(menuItem.getItemId()) {
case R.id.nav_websites:
fragmentClass = ScreenOne.class;
break;
case R.id.nav_commands:
fragmentClass = ScreenTwo.class;
break;
case R.id.nav_help:
fragmentClass = ScreenThree.class;
break;
default:
fragmentClass = ScreenOne.class;
}
try {
fragment = (Fragment) fragmentClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();
setTitle(menuItem.getTitle());
mDrawerLayout.closeDrawers();
}

在第一个 fragment

public class ScreenOne extends Fragment implements  Button.OnClickListener 

我有一个函数

public void loadText() {
SharedPreferences myPrefs;
myPrefs = getActivity().getSharedPreferences("myPrefs", MODE_WORLD_READABLE);

siteName1.setText(myPrefs.getString("siteName1_txt", "").toString());
siteURL1.setText(myPrefs.getString("siteURL1_txt", "").toString());

}

在我的mainActivity类中,在onCreate方法中,我想调用loadText()方法,我尝试过

ScreenOne fragment = new ScreenOne();
fragment.loadText();

但这没有用。我无法通过 ID 或标签找到 fragment ,因为他们没有。请提供任何帮助或建议,我们将不胜感激。

最佳答案

您的代码存在几个大问题,这些是我看到的问题:

话虽这么说,解决这个特定问题的最简单方法是仅在保证当前屏幕是当前屏幕时才调用 loadText 方法(即,在更改屏幕时执行此操作或保留对当前项目的引用并使用 instanceOf)

public void selectDrawerItem(MenuItem menuItem) {
...
try {
fragment = (Fragment) fragmentClass.newInstance();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();
...
if (ScreenOne.class.equals(fragmentClass)) {
fragment.loadText();
}
} catch (Exception e) {
e.printStackTrace();
}
}

但是我想澄清,这不是最干净的解决方案,我建议您坚持使用 single responsibility并让 fragment 负责加载自己的文本,而 Activity 负责将共享首选项中的值作为参数传递(或通过接口(interface) callback pattern )。这可以避免在 fragment 准备好之前调用 loadText 的任何更改。

关于java - 从 Fragment 中调用 MainActivity 中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42718626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com