如何从android中的活动调用片段方法?
我有一个选项卡式视图,在我的主要活动上有一个浮动操作按钮。每当我点击浮动操作按钮时,我想调用片段代码中存在的方法。我尝试了很多东西,但它是这么说的 尝试对空对象引用调用虚拟方法“void com.shyamzawar.makeMyResume.fragments.EducationalDetailsFragment.showChangeLangDialog()” 以下是我的UserDetailsActivity代码:如何从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
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很乐意帮忙!