从FragmentPagerAdapter调用活动方法

时间:2016-03-10 16:25:26

标签: java android android-fragments

我的MainActivity有一个double纬度值,我想传递给FragmentPagerAdapter内的一个片段,所以我在MainActivity.java中创建了这个getter方法:

public double getLatitude() {
   return this.latitude;
}

现在我尝试在创建它时将此值传递给片段(getItem()方法是FragmentPagerAdapter类的一部分):

    public Fragment getItem(int position) {
            if (position == 0) {
                return new Fragment1();
            } else if (position == 1) {
                return new Fragment2();
            } else {
                Fragment3 fragment3 = new Fragment3();
                Bundle args = new Bundle();
                args.putDouble(fragment3.ARG_PARAM1, getActivity().getLatitude());
                fragment3.setArguments(args);
                return fragment3;
            }
        }

但是,我收到的编译错误是Error:(156, 68) error: cannot find symbol method getActivity()

当我创建片段的新实例时,如何才能获得我的主要活动getLatitude()

3 个答案:

答案 0 :(得分:1)

为什么不在适配器的构造函数中传递该值,如

假设您的适配器类名称是ViewPagerPagerAdapter,然后在该适配器中执行以下操作

public class ViewPagerPagerAdapter extends FragmentPagerAdapter {

private double mLattitude;
public ViewPagerPagerAdapter (double lattitude) {
    this.mLattitude = lattitude;
}

//Now use that mLattitude wherever you want

public Fragment getItem(int position) {
            if (position == 0) {
                return new Fragment1();
            } else if (position == 1) {
                return new Fragment2();
            } else {
                Fragment3 fragment3 = new Fragment3();
                Bundle args = new Bundle();
                args.putDouble(fragment3.ARG_PARAM1, mLattitude);
                Log.d("WHATEVER", "WHATEVER: " + String.valueOf(mLattitude));
                fragment3.setArguments(args);
                return fragment3;
            }
        }
}

现在,当您从MainActivity启动适配器时,请执行

ViewPagerAdapter adapter = new ViewPagerAdapter(lattitude);

答案 1 :(得分:1)

FragmentPagerAdapter不是Fragment,即它没有getActivity()方法。如果您需要从活动中访问纬度,只需将活动参考传递给FragmentPagerAdapter构造函数即可。使用这里的界面,像LatitudeProvider这样的东西会更加灵活。

示例:

class MainActivity extends Activity implements LatitudeProvider {

    // pager adapter creation
    new MyFragmentPagerAdapter(this);

    @Override
    public double getLatitude() {
        return this.latitude;
    }
}

您的片段寻呼机适配器:

interface LatitudeProvider {
    double getLatitude();
}

public class MyFragmentManagerAdapter extends FragmentPagerAdapter {
    private final LatitudeProvider latitudeProvider;

    public MyFragmentManagerAdapter(LatitudeProvider latitudeProvider) {
        this.latitudeProvider = latitudeProvider;
    }

    ...
    // Now you can get your latitude like this:
    latitudeProvider.getLatitude();
}

答案 2 :(得分:-1)

getActivity()返回上下文而不是MainActivity的对象。据我所知,没有办法在android中获取Activity的当前对象。 所以你应该把它公之于众,如下所示。

public static double getLatitude() {
   return this.latitude;     // make latitude public and static as well 
}

现在在您的MainActivity.java

MainActivity.getLatitude();

如果值没有变化。然后你可以在构造函数中传递它。