簡體   English   中英

如何從Android中的另一個片段調用一個片段方法

[英]How to call one Fragment Method from another Fragment in android

在我的應用程序中,我需要Activity 兩個fragments 為了顯示這兩個fragments我使用ViewPager

Fragment 2中,我有一個方法,我想從Fragment 1中調用此方法!

我在第二部分中的方法:

public void getComments() {

    JsonObject requestBean = new JsonObject();
    requestBean.addProperty("entityType", 4);
    requestBean.addProperty("reviewType", 5);
    requestBean.addProperty("reviewUserType", 2);
    requestBean.addProperty("entityID", serialID);
    requestBean.addProperty("celebrityId", 0);
    requestBean.addProperty("pageIndex", 1);
    requestBean.addProperty("pageSize", 10);

    InterfaceApi api = ApiClient.getClient().create(InterfaceApi.class);
    Call<CommentResponse> call = api.getComments(token, requestBean);

    call.enqueue(new Callback<CommentResponse>() {
        @Override
        public void onResponse(Call<CommentResponse> call, Response<CommentResponse> response) {
            if (response.body().getData() != null) {
                if (response.body().getData().size() > 0) {
                    reviewSerialFrag_NoComment.setText("");
                } else {
                    reviewSerialFrag_NoComment.setText(context.getResources().getString(R.string.noReviews));
                }
                commentModel.clear();
                commentModel.addAll(response.body().getData());
                commentsListAdapter.notifyDataSetChanged();
                reviewSerialFrag_newsCommentsRecyclerView.setAdapter(commentsListAdapter);

                reviewSerialFrag_newsCommentsUserTypeText.setText(userTypeStr);
                reviewSerialFrag_newsCommentsReviewTypeText.setText(reviewTypeStr);

                reviewSerialFrag_Progress.setVisibility(View.GONE);
            }
        }

        @Override
        public void onFailure(Call<CommentResponse> call, Throwable t) {
            reviewSerialFrag_Progress.setVisibility(View.GONE);
        }
    });
}

並使用片段一中的以下代碼調用此方法:

InterfaceApi api = ApiClient.getClient().create(InterfaceApi.class);
Call<SendCommentResponse> call = api.getSendComment(token, sendData);

showView(loadProgress);
goneView(sendBtn);

call.enqueue(new Callback<SendCommentResponse>() {
    @Override
    public void onResponse(Call<SendCommentResponse> call, Response<SendCommentResponse> response) {
        if (response.body().getData()) {

            Alerter.create(getActivity())
                    .setText(context.getResources().getString(R.string.successSendComment))
                    .setDuration(2000)
                    .setIcon(R.drawable.ic_tick_new)
                    .setBackgroundColorRes(R.color.colorPrimary)
                    .enableSwipeToDismiss()
                    .enableProgress(true)
                    .setOnShowListener(new OnShowAlertListener() {
                        @Override
                        public void onShow() {
                            watchlistDialog.dismiss();
                            goneView(loadProgress);
                            showView(sendBtn);
                        }
                    })
                    .setOnHideListener(new OnHideAlertListener() {
                        @Override
                        public void onHide() {
                            infoEpisodeFrag_addWatchList.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_eye_white));
                            infoEpisodeFrag_addWatchList.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#1da8b9")));

                            getData();
                            new EpisodeDetail_ReviewFrag().getComments();
                        }
                    })
                    .setProgressColorRes(R.color.whiteMe)
                    .show();
        }
    }

    @Override
    public void onFailure(Call<SendCommentResponse> call, Throwable t) {

    }
});

但是向我展示LogCat中的此錯誤:

FATAL EXCEPTION: main
                                                                         Process: com.example.app, PID: 11978
                                                                         java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.support.v4.app.FragmentActivity.getResources()' on a null object reference
                                                                             at com.example.app.Fragments.EpisodeDetailFrags.EpisodeDetail_ReviewFrag$6.onResponse(EpisodeDetail_ReviewFrag.java:305)
                                                                             at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
                                                                             at android.os.Handler.handleCallback(Handler.java:739)
                                                                             at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                             at android.os.Looper.loop(Looper.java:135)
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5349)
                                                                             at java.lang.reflect.Method.invoke(Native Method)
                                                                             at java.lang.reflect.Method.invoke(Method.java:372)
                                                                             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)

Fragment 2中顯示此行的錯誤:

reviewSerialFrag_NoComment.setText(context.getResources().getString(R.string.noReviews));

我該如何解決? 請幫我

無需調用getResources()方法。 只是getString(R.string.noReviews)起作用。

獲取片段的實例

ExampleFrag frag=(ExampleFrag)getActivity().getSupportFragmentManager().findFragmentById(R.id.fragment2); 

然后調用任何方法

 frag.myMethod();  

像常規類一樣使用Fragments確實是一個壞主意。 即使您想傳遞簡單的數據,也可以使用實例和包。

如果您的方法不依賴於片段本身,則創建兩個片段共享的單獨的實用程序類。 只需將其傳遞給上下文,以便它可以解析其中的一些變量。

在片段中的單獨類中將UI操作分開。 創建該實用程序類的偵聽器,並更改片段中的視覺狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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