我想通过单击onCreateView中的重试按钮来刷新片段。 如果我的互联网断开连接,则必须返回fragment_no_internet_error布局。有一个按钮可以重新加载片段。
它给了我错误:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: ir.hamedanmelk.hamedanmelk, PID: 21310
java.lang.NullPointerException: Attempt to read from field 'androidx.fragment.app.FragmentManager androidx.fragment.app.Fragment.mFragmentManager' on a null object reference
at androidx.fragment.app.BackStackRecord.detach(BackStackRecord.java:220)
我的OnCreateView:
@SuppressLint("SetJavaScriptEnabled")
@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v;
CheckConnectivity checkConnectivity=new CheckConnectivity();
if(!checkConnectivity.isNetworkAvailable(getActivity())) {
v=inflater.inflate(R.layout.fragment_no_internet_error, container, false);
Button retrybutton = (Button)v.findViewById(R.id.no_internet_fragment_button_retry);
retrybutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Fragment frg = getActivity().getSupportFragmentManager().findFragmentById(R.id.HelpFragment);
final FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.detach(frg);
ft.attach(frg);
ft.commit();
}
});
return v;
}
v=inflater.inflate(R.layout.fragment_f_a_q, container, false);
mwebview = (WebView) v.findViewById(R.id.webview_f_a_q);
WebSettings webSettings=mwebview.getSettings();
webSettings.setJavaScriptEnabled(true);
final ProgressDialog progressDialog = new ProgressDialog(getActivity());
//TODO Change FontFace https://stackoverflow.com/questions/3900658/how-to-change-font-face-of-webview-in-android
mwebview.setWebViewClient(new WebViewClient(){
return v;
}
}
答案 0 :(得分:0)
尝试使用此代码。因为我认为问题出在API级别
FragmentTransaction transaction = mActivity.getFragmentManager()
.beginTransaction();
if (Build.VERSION.SDK_INT >= 26) {
transaction.setReorderingAllowed(false);
}
transaction.detach(this).attach
(this).commit();
答案 1 :(得分:0)
尝试一下。 在您的片段中
((MainActivity)getActivity()).reload()
在您的MainActivity中
void reload(){
final FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
// R.id.fragment_layout is your fragment container view
ft.replace(R.id.fragment_layout, instanceFragment);
ft.commit()
}