[英]How to call the Function of the Fragment from the Main activity
首先讓我告訴您我要做什么。 我有一個帶有導航抽屜和一些片段類的活動。 在活動履歷表上,我正在調用MapFragment,它用於向用戶顯示其當前位置以及在Google地圖上的藍點。
這正在成功運行。
現在,我要從導航抽屜中在地圖上顯示圖釘,為此,我正在調用用於從服務器下載圖釘並在地圖上顯示圖釘的函數。 此函數名為GetAllPins,我使用離子庫通過以下方式進行此操作:
public void GetAllPins() {
progressDialog.show();
Ion.with(getActivity())
.load(MyServiceUrl)
.progressHandler(new ProgressCallback() {
@Override
public void onProgress(long downloaded, long total) {
if (downloaded == total) {
progressDialog.dismiss();
}
}
})
.setMultipartParameter("name", "Stacy")
.setMultipartParameter("latitude","18.92239u")
.setMultipartParameter("longitude", "24.98329")
.asJsonObject()
.setCallback(new FutureCallback<JsonObject>() {
@Override
public void onCompleted(Exception e, JsonObject result) {
if (result == null) {
progressDialog.dismiss();
Toast.makeText(getActivity(), "Error in establishing connection with server", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getActivity(), "Completed successfully", Toast.LENGTH_SHORT).show();
}
}
);
}
注意:在MyMapFragment的onActivityCreated方法中調用此方法時,它工作正常並成功繪制了引腳,但是當我嘗試從MainActivity調用它時,卻給了我NullpointerException。
在MainActivity中,我使用SwitchCase導航到相應的片段時,在切換情況下調用它。
公共無效navigationToFragment(int pos){
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
final MyMapFragment myMapFragment = new MyMapFragment();
switch (pos) {
case R.id.home:
if(!isFirstRun) {
fragmentTransaction.replace(R.id.frame, myMapFragment, "MapFragment").addToBackStack("MapFragment").commit();
}else{
isFirstRun=false;
}
//
break;
case R.id.mark_pin:
isFirstRun=false;
if (myMapFragment!=null){
myMapFragment.GetAllPins();}
break;
}
所以我在ProgressDialog上得到了一個NullpointerException異常,但是如果我注釋掉以下內容,則會發生錯誤。
FATAL EXCEPTION: main
java.lang.NullPointerException: Can not pass null context in to retrieve ion instance
告訴我如何從主活動中調用此函數,以使用該MyMapFragment在地圖上顯示圖釘。 我不想制作不同的地圖片段以顯示地圖上的圖釘。 請幫我。
從日志本身,itz清除了調用上下文的錯誤iz ...從片段中,當您調用getActivity()時,您將獲得適當的上下文...但是當您從MainActivity中調用相同的方法時,getActivity()將返回null ...因此,最好將上下文作為參數添加到函數中,並且從片段調用時,通過傳遞getActivity()進行調用,從MainActivity傳遞通過'this'進行調用...
我沒有測試...但是應該可以...
像這樣從MainActivity調用該函數fragment.GetAllPins(MainActivity.this);
當您從片段調用時,應該是這樣, GetAllPins(getActivity());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.