fragment清除頁面資料(重新載入佈局)

喻志強發表於2017-07-27

上一篇部落格介紹瞭如何解決Fragment重疊的問題,有需要的同學可以看一下,底部有demo下載。
直通車:完美解決Fragment重疊

本篇部落格我們來說一下怎麼讓fragment重新載入佈局資原始檔。以及要注意的問題。

首先來說一下為什麼有這個需求。

比如,我有這麼一個頁面,如下圖

這裡寫圖片描述

該頁面要填寫一大堆資料,然後點選提交會把當前頁面的資料提交到伺服器,提交完成後我想把當前頁面已填寫的資料給清除掉。怎麼辦呢?

最笨的方法就是,我找到每個控制元件,然後賦個空值,不過這樣也太麻煩了點,而且也不好維護。

簡單點的辦法就是,當我提交完成後,先把該fragment移除掉,然後重新建立載入一遍,這樣一來,頁面的資料就回到初始狀態了。

需要注意的是要處理好fragment的移除和新增顯示操作,避免出現重疊的bug

在fragment中呼叫一下父activity中的reLoadFragView()方法


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.submit:
                /*模擬提交成功後  重新載入佈局*/

                 MainActivity activity= (MainActivity) getActivity();
                activity.reLoadFragView();
                break;
        }

        return super.onOptionsItemSelected(item);
    }

MainActivity中現將fragment移除,然後重新新增顯示即可。

     /*重新載入佈局*/
    public void reLoadFragView(){
        /*現將該fragment從fragmentList移除*/
        if (fragmentList.contains(dashboardFragment)){
            fragmentList.remove(dashboardFragment);
        }
        /*從FragmentManager中移除*/
        getSupportFragmentManager().beginTransaction().remove(dashboardFragment).commit();

        /*重新建立*/
        dashboardFragment=new DashboardFragment();
        /*新增到fragmentList*/
        fragmentList.add(dashboardFragment);

        /*顯示*/
        showFragment(dashboardFragment,DASHBOARD_FRAGMENT_KEY);

    }

需要注意的是,如果報Can not perform this action after onSaveInstanceState這個錯誤的話,就把commit更改為commitAllowingStateLoss即可。

這裡寫圖片描述

效果圖:

這裡寫圖片描述


下面是demo,希望能幫到你。

demo


如果你覺得本文對你有幫助,麻煩動動手指頂一下,算是對本文的一個認可,如果文中有什麼錯誤的地方,還望指正,轉載請註明轉自喻志強的部落格 ,謝謝!

相關文章