Android:从MainActivity访问片段实例
问题描述:
我已经开始使用Android Studio的预先定义的带片段的布局(SectionsPagerAdapter,ViewPager)编码一个小应用。Android:从MainActivity访问片段实例
我得在MainActivity.class主/ UI线程运行的任务,在一个点显示了的onClick方法
@Override
public void onClick(DialogInterface dialog, int which) {
category = eventsToDisplay.get(which);
averageFragment.category = category;
dialog.dismiss();
}
一个对话框,但我不能让averageFragment.category = category;
分配工作。
在MainActivity的onCreate方法中,我调用averageFragment = (AverageFragment) getSupportFragmentManager().findFragmentByTag(AverageFragment.tag);
,但是这给了我一个NullPointerException。
我已经尝试以下解决方案(其中大部分是从本网站):
getSupportFragmentManager().findFragmentById(R.id.fragment_average)
-
getSupportFragmentManager().findFragmentByTag(AverageFragment.tag)
< - 基本上是一个静态变量,实例化时的片段创建。 mSectionsPageAdapter.getItem(1)
所有这些都让我无论是NPE或IllegalStateException.FragmentNotAttachedToView。
其他相关代码:
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
switch (position) {
case 0:
return InspectionFragment.newInstance(position + 1);
case 1:
return AverageFragment.newInstance(position + 1);
case 2:
return RegulationsFragment.newInstance(position + 1);
}
return null;
}
@Override
public int getCount() {
// Show 3 total pages.
return 3;
}
@Override
public CharSequence getPageTitle(int position) {
Locale l = Locale.getDefault();
switch (position) {
case 0:
return getString(R.string.title_section1).toUpperCase(l);
case 1:
return getString(R.string.title_section2).toUpperCase(l);
case 2:
return getString(R.string.title_section3).toUpperCase(l);
}
return null;
}
}
如何从主要活动访问片段任何想法?
答
检查将适配器实例分配给寻呼机的位置。你得到的例外是指该片段尚未加载到视图的是,这很可能是因为你调用你的任务:
averageFragment = (AverageFragment) getSupportFragmentManager().findFragmentByTag(AverageFragment.tag);
从onCreate()方法
。尝试将此作业移至onResume(),它应确保您的片段已加载到视图中并可通过supportFragmentManager进行访问。在将活页夹的适配器设置在活动的生命周期中之后,也要确保此分配发生。
完美的作品!谢谢 :) – suushiemaniac 2014-10-11 01:05:00