簡體   English   中英

單擊按鈕時如何重新加載片段

[英]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.

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