如何从android中的活动调用片段方法?

如何从android中的活动调用片段方法?,android,android-fragments,android-viewpager,tabbed-view,android-tabbed-activity,Android,Android Fragments,Android Viewpager,Tabbed View,Android Tabbed Activity,我有一个选项卡式视图,在我的主要活动上有一个浮动操作按钮。每当我点击浮动操作按钮时,我想调用片段代码中存在的方法。我尝试了很多东西,但它是这么说的 尝试对空对象引用调用虚拟方法“void com.shyamzawar.makeMyResume.fragments.EducationalDetailsFragment.showChangeLangDialog()” 以下是我的UserDetailsActivity代码: public class UserDetailsActivity extend

我有一个选项卡式视图,在我的主要活动上有一个浮动操作按钮。每当我点击浮动操作按钮时,我想调用片段代码中存在的方法。我尝试了很多东西,但它是这么说的

尝试对空对象引用调用虚拟方法“void com.shyamzawar.makeMyResume.fragments.EducationalDetailsFragment.showChangeLangDialog()”

以下是我的UserDetailsActivity代码:

public class UserDetailsActivity extends AppCompatActivity {

private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;
private ViewPagerAdapter adapter;

private int currentPage;

private FloatingActionButton fab;

private int readFileRequestCode;

private int[] tabIcons = {
        R.drawable.ic_account_circle_white,             //0 Personal Details
        ...
        R.drawable.ic_create_white_36dp,                //7 Declaration
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_user_details);

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    //getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    //Set Title according to the user clicked
    String name = "Shyam Zawar";
    this.setTitle(name+"'s Profile");

    fab = (FloatingActionButton) findViewById(R.id.fab);

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(viewPager);
    viewPager.addOnPageChangeListener(new DetailOnPageChangeListener());



    tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);
    setupTabIcons();

    fab.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View view)
        {
            if (currentPage>0)
            {
                switch (currentPage)
                {
                    case 1:
                        FragmentManager manager = getSupportFragmentManager();
                        EducationalDetailsFragment educationalDetailsFragment = (EducationalDetailsFragment) manager.findFragmentById(R.id.EduFragment);
                        educationalDetailsFragment.showChangeLangDialog();
                        break;
                }
            }
        }
    });
}


private void setupTabIcons()
{
    tabLayout.getTabAt(0).setIcon(tabIcons[0]);
    ...
    tabLayout.getTabAt(7).setIcon(tabIcons[7]);
}

private void setupViewPager(ViewPager viewPager)
{
    adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFrag(new PersonalDetailsFragment(), " PERSONAL DETAILS");            //0
    ...
    adapter.addFrag(new DeclarationFragment(), " DECLARATION");                     //7
    viewPager.setAdapter(adapter);
}

class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position)
    {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount()
    {
        return mFragmentList.size();
    }

    public void addFrag(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }
  }
}

您的EducationalDetailsFragment对象似乎为空。使用此选项从viewpager中检索片段。这是一种更好的做法:

Fragment EducationalDetailsFragment = viewPager.getAdapter().getItem(index);

如果您不知道
索引
。您可以在创建片段时为其设置标记,并通过viewpager适配器中的标记查找片段;)

您的EducationalDetailsFragment对象似乎为空。使用此选项从viewpager中检索片段。这是一种更好的做法:

Fragment EducationalDetailsFragment = viewPager.getAdapter().getItem(index);
如果您不知道
索引
。您可以在创建片段时为其设置标记,并通过viewpager适配器中的标记查找片段;)

改变片段:

public void changeFragment(Fragment fragment){
    fragmentManager = getSupportFragmentManager();
    fragmentTransaction = fragmentManager.beginTransaction().replace(R.id.content,
            fragment).commit();

}
更改片段:

public void changeFragment(Fragment fragment){
    fragmentManager = getSupportFragmentManager();
    fragmentTransaction = fragmentManager.beginTransaction().replace(R.id.content,
            fragment).commit();

}

您可以全局声明您的educationFragment

private EducationalDetailsFragment mEducationalDetailsFragment;


//in your setupViewPager() method
mEducationalDetailsFragment = new EducationalDetailsFragment();
adapter.addFrag(mEducationalDetailsFragment , "Whatever the Name");


onYourFabClickListerner(){
     call the method by using mEducationalDetailsFragment
}

您可以全局声明您的educationFragment

private EducationalDetailsFragment mEducationalDetailsFragment;


//in your setupViewPager() method
mEducationalDetailsFragment = new EducationalDetailsFragment();
adapter.addFrag(mEducationalDetailsFragment , "Whatever the Name");


onYourFabClickListerner(){
     call the method by using mEducationalDetailsFragment
}

@ShyamZawar很乐意帮忙@ShyamZawar很乐意帮忙!