[英]How to reload fragment when button clicked
我想通過單擊 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;
}
}
嘗試使用此代碼。 因為我認為問題在於 API 級別
FragmentTransaction transaction = mActivity.getFragmentManager()
.beginTransaction();
if (Build.VERSION.SDK_INT >= 26) {
transaction.setReorderingAllowed(false);
}
transaction.detach(this).attach
(this).commit();
嘗試這個。 在你的片段中
((MainActivity)getActivity()).reload()
在你的主活動中
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()
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.