Java 从片段调用MainActivty中的方法

Java 从片段调用MainActivty中的方法,java,android,Java,Android,我有MainActivty类和DrawerLayout,所以我动态添加片段 public void selectDrawerItem(MenuItem menuItem) { Fragment fragment = null; Class fragmentClass; switch(menuItem.getItemId()) { case R.id.nav_websites: fragmentClass = ScreenOne.cl

我有
MainActivty
类和
DrawerLayout
,所以我动态添加
片段

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();
}
第一段

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或标记的片段,因为它们没有。非常感谢您提供的任何帮助或建议。

您可以使用like访问任何公共活动方法

((YourActivity)getActivity()).nameofmethod


只有与您的活动相关的人才能使用like访问活动的任何公共方法

((YourActivity)getActivity()).nameofmethod


您的代码中有几个大问题,我看到了这些问题:

  • 你真的需要了解
  • 你不知道你有什么碎片,但总是
  • 您希望在onCreate中使用片段方法,而不考虑
  • 您可以尝试创建一个片段实例,然后使用它
  • 当您应该使用
  • 您的活动与片段耦合,因为您调用
也就是说,对于这个特定问题,最简单的解决方法是仅在保证当前屏幕为当前屏幕时调用loadText方法(即,在更改它时执行此操作,或保留对当前项的引用并使用instanceOf)


但是我想澄清的是,这不是最干净的解决方案,我建议您坚持使用,让片段负责加载自己的文本,而活动负责将共享首选项中的值作为参数传递(或通过接口传递)。这避免了在片段准备就绪之前调用loadText的任何更改。

您的代码有几个大问题,我看到的问题如下:

  • 你真的需要了解
  • 你不知道你有什么碎片,但总是
  • 您希望在onCreate中使用片段方法,而不考虑
  • 您可以尝试创建一个片段实例,然后使用它
  • 当您应该使用
  • 您的活动与片段耦合,因为您调用
也就是说,对于这个特定问题,最简单的解决方法是仅在保证当前屏幕为当前屏幕时调用loadText方法(即,在更改它时执行此操作,或保留对当前项的引用并使用instanceOf)


但是我想澄清的是,这不是最干净的解决方案,我建议您坚持使用,让片段负责加载自己的文本,而活动负责将共享首选项中的值作为参数传递(或通过接口传递)。这避免了在片段准备就绪之前调用loadText的任何更改。

您可以使用活动的上下文调用您的
活动
方法,例如:

((MainActivity)context).updateWishlistCount();

希望这对你有帮助

您可以使用活动的上下文调用您的
活动
方法,例如:

((MainActivity)context).updateWishlistCount();

希望这对你有帮助

您可以使用以下答案轻松完成:java脚本在哪里?首先,您必须检查当前可见的片段,bcz u只能在片段当前处于活动状态时从ScreenOne调用函数。您可以使用以下答案轻松完成:java脚本在哪里?首先,您必须检查当前可见的片段,bcz u只能在ScreenOne当前处于活动状态时从ScreenOne调用函数。他希望调用的函数位于活动的片段中,而不是您将使用getActivity的片段中。此外,为了解耦一个片段(它是整个点),您需要在这里使用一个接口。还有人在您之前很久就发布了这个相同的答案。他希望调用的函数位于活动的片段中,而不是您将使用getActivity的片段中。此外,为了解耦一个片段(它是整个点),您需要在这里使用一个接口。也有人在你之前很久就发布了这个相同的答案。正如达尔文在另一个答案中提到的——他希望调用一个函数,而不是达尔文在另一个答案中提到的那样——他希望调用一个函数,而函数位于活动的片段中,而不是相反