简体   繁体   English

从创建它的活动中调用FragmentStatePagerAdapter中的片段中的方法

[英]Calling a method in a fragment in a FragmentStatePagerAdapter from the activity that created it

I have an activity that has a navigation drawer and a Fragment state adapter. 我有一个具有导航抽屉和Fragment状态适配器的活动。 When ever I click something in the navigation drawer I am passing that info to the mainactivity via a interface.And then I am passing that data to the main fragment which is in Fragmentstateadapter. 每当我单击导航抽屉中的某个内容时,我都会通过界面将该信息传递给mainactivity,然后将该数据传递给Fragmentstateadapter中的主片段。 The problem is when ever the screen rotates I get a null pointer exception for the main fragment.` 问题是,每当屏幕旋转时,主片段都会出现空指针异常。

public class MainActivity extends ActionBarActivity implements RightDrawerRecyclerAdapter.Filters,
    LeftDrawerFragment.MenuSection,CommonAsyncTask.ServerData {
private static final String TAG = MainActivity.class.getSimpleName();
public MainFragment mMainFragment;
  @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ViewPager pager = (ViewPager) findViewById(R.id.pager);
    ScreenSlidePagerAdapter pagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
    pager.setAdapter(pagerAdapter);

}

   @Override
public void getMenuSelection(int selection) {
    Log.d(TAG,"getMenuSelection->"+selection);
        mMainFragment.getMenuSelection(selection);

}



private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {

    public ScreenSlidePagerAdapter(FragmentManager fm) {
        super(fm);
        Log.d(TAG, "in screenslide");
    }

    @Override
    public Fragment getItem(int position) {
        if (position == 0) {
            Log.d(TAG, "in returning MainFragment");
            mMainFragment=new MainFragment();
            return mMainFragment;
        } else {
            return new MapViewFragment();
        }
    }

    @Override
    public int getCount() {
        return 2;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        if (position == 0) {
            return "List";
        } else {
            return "Map";
        }
    }
}}

So getMenuSelection is the method from the interface in navigation drawer. 因此,getMenuSelection是导航抽屉中界面的方法。 Then I have a method with the same name in my main fragment in MainFragment.So when ever I select something in the navigation drawer I can change contents in the main fragment but when ever I turn my screen a new instance of MainFragment is getting created and getItem(int position) is not getting trigged so my MainFragment object is null and now I cant pass data from my navigation drawer to main fragment.I tried making MainFragment object as static and that created problems in my MainFragment class. 然后我在MainFragment的主片段中有一个同名的方法,所以每当我在导航抽屉中选择某个内容时,我都可以更改主片段中的内容,但是每当我打开屏幕时,都会创建一个新的MainFragment实例并getItem(int position)没有被触发,所以我的MainFragment对象为null,现在我无法将数据从导航抽屉传递给主片段。我试图将MainFragment对象设置为静态对象,这在MainFragment类中造成了问题。

So how can I get back the same MainFragment object even when the screen is turned. 因此,即使屏幕被转动,我也如何找回相同的MainFragment对象。 Or is there any better way to pass data between navigation drawer fragment and a fragment in FragmentState adapter 还是有更好的方法在导航抽屉片段和FragmentState适配器中的片段之间传递数据

大家好,我通过接口通过onAttach将MainFragment的当前实例发送回MainActivity来解决了这个问题

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM