[英]Calling Fragment Method From Main Activity with FragmentPagerAdapter
[英]Calling activity method from FragmentPagerAdapter
我的MainActivity
具有一個double
緯度值,我想將其傳遞給FragmentPagerAdapter
內部的一個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()
?
您為什么不在Adapter的Constructor中傳遞該值,例如
假設您的適配器類名稱為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);
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();
}
getActivity()返回上下文不是MainActivity的對象。 據我所知,沒有辦法在android中獲取Activity的當前對象。 因此,您應按以下方式將其設為公開和靜態。
public static double getLatitude() {
return this.latitude; // make latitude public and static as well
}
現在在您的MainActivity.java中
MainActivity.getLatitude();
如果價值沒有改變。 然后,您可以在構造函數中傳遞它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.