单击按钮时如何重新加载片段

时间:2020-10-20 07:20:45

标签: java android

我想通过单击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;
 }
}

2 个答案:

答案 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()
}