簡體   English   中英

如何從Main活動中調用片段的功能

[英]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上得到了一個N​​ullpointerException異常,但是如果我注釋掉以下內容,則會發生錯誤。

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM