我的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()
?
答案 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();
如果值没有变化。然后你可以在构造函数中传递它。