如何从其他片段
问题描述:
在我的应用程序调用片段的方法我想打电话从其他fragments
fragment
方法,我下面写代码,但如果调用此方法告诉我下面的错误在logcat的和强制关闭应用程序。如何从其他片段
为了显示这两个fragments
到activity
我使用TabLayout
和ViewPager
。
我回顾片段编码:
public void getComments(final Context context) {
JsonObject requestBean = new JsonObject();
requestBean.addProperty("entityType", 1);
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) {
reviewMovieFrag_NoComment.setText("");
} else {
reviewMovieFrag_NoComment.setText(context.getResources().getString(R.string.noReviews));
SerialReview_CastProgress.setVisibility(View.GONE);
}
commentModel.clear();
commentModel.addAll(response.body().getData());
commentsListAdapter.notifyDataSetChanged();
reviewMovieFrag_newsCommentsRecyclerView.setAdapter(commentsListAdapter);
reviewMovieFrag_newsCommentsUserTypeText.setText(userTypeStr);
reviewMovieFrag_newsCommentsReviewTypeText.setText(reviewTypeStr);
reviewMovieFrag_Progress.setVisibility(View.GONE);
}
}
@Override
public void onFailure(Call<CommentResponse> call, Throwable t) {
reviewMovieFrag_Progress.setVisibility(View.GONE);
}
});
}
我想呼叫这种方法(getComments法)为InfoFragment,为此我写这篇文章的代码:
new MovieDetail_reviewFragment().getComments(getActivity());
但在LogCat中显示给我这个错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at com.test.app.Fragments.MovieDetailFragments.MovieDetail_reviewFragment$6.onResponse(MovieDetail_reviewFragment.java:301)
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)
此行显示错误:
reviewMovieFrag_NoComment.setText(context.getResources().getString(R.string.noReviews));
注意:各位版主和亲爱的用户,我知道这个错误空指针,但我不知道我该如何解决它?
我试图解决这个问题,但我不能所以我问*。
请帮助我,不要给我负面的观点或重复我的文章!
请帮助我,感谢所有
答
这里,
new MovieDetail_reviewFragment().getComments(getActivity());
是新创建的片段类。在开始创建Fragment类时,您需要使用所有变量。
使用viewPager.setOffscreenPageLimit(fragmentNumber);
- 这将帮助您在标签初始化时创建所有片段。 然后使用实例来访问任何片段方法。
申报的片段类的顶部,private static FragmentClass instance = null;
您的片段类重写里面的onCreate()和初始化实例,
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
instance = this;
}
创建的getInstance()的片段方法中包含您的调用方法,
public static FragmentClass getInstance(){
return instance;
}
最后从另一个片段调用方法,
FragmentClass.getInstance().yourMethod();
答
不要拿它,否则,但你在做什么不是好的设计模式, 你应该使用接口来进行任何两个片段之间的通信。它会让事情变得更容易。看看这个帖子Basic Communication between two fragments
感谢我的兄弟,但没有初始化实例!你能告诉我完整的代码吗?因为我是业余的。请 – Joke
你能帮我的弟弟吗? – Joke
检查更新的答案,让我知道它的工作与否。 – Exigente05