0

我使用底部栏库制作应用程序。我使用如何在打开另一个片段时冻结片段

编译 'com.roughike:底部酒吧:2.0.2'

我的hve 5片段这样

public class EventFragment extends Fragment { 
private RecyclerView rcEvent; 
private EventAdapter mAdapter; 
private List<EventModel> mgridData; 
private LinearLayoutManager layoutManager; 
private SwipeRefreshLayout mSwipe; 


public EventFragment() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView= inflater.inflate(R.layout.fragment_event, container, false); 

    mSwipe= (SwipeRefreshLayout) rootView.findViewById(R.id.swipeRefresh); 

    rcEvent = (RecyclerView) rootView.findViewById(R.id.rv); 
    layoutManager = new LinearLayoutManager(getActivity()); 
    rcEvent.setLayoutManager(layoutManager); 
    mgridData = new ArrayList<>(); 
    mAdapter = new EventAdapter(getActivity(), mgridData); 
    rcEvent.setAdapter(mAdapter); 

    fetchData(); 

    mSwipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
     @Override 
     public void onRefresh() { 
      fetchData(); 
      //mSwipe.setRefreshing(false); 
     } 
    }); 

    return rootView; 
} 

public void fetchData() 
{ 

    mSwipe.setRefreshing(true); 

    apiData api= ApiClient.getClient().create(apiData.class); 
    Call<EventResponse> call=api.GetEvent(); 
    call.enqueue(new Callback<EventResponse>() { 
     @Override 
     public void onResponse(Call<EventResponse> call, Response<EventResponse> response) { 
      if(response.isSuccessful()) 
      { 
       EventResponse result=response.body(); 
       Log.d("Event", "response = " + new Gson().toJson(result)); 
       if(result !=null) 
       { 
        List<EventModel> eventResponse= result.getEventData(); 
        if(eventResponse !=null) 
        { 
         for (EventModel eventRespon :eventResponse) { 
          mgridData.add(eventRespon); 
         } 
         RecyclerView.Adapter adapter = new EventAdapter(getActivity(), mgridData); 
         mAdapter.setListData(mgridData); 
         rcEvent.setAdapter(adapter); 
        } 
        mSwipe.setRefreshing(false); 
       } 
      } 
     } 

     @Override 
     public void onFailure(Call<EventResponse> call, Throwable t) { 
      Toast.makeText((MainActivity)getActivity(), "Koneksi Ke Internet Gagal", Toast.LENGTH_SHORT).show(); 
      mSwipe.setRefreshing(false); 
     } 

    }); 
} 

}

MainActivity。 Java

public class MainActivity extends AppCompatActivity { 
boolean doubleBackToExitPressedOnce = false; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    //Declare Fragment 
    final EventFragment eventFragment=new EventFragment(); 
    final BloodFragment bloodFragment=new BloodFragment(); 
    final MerchantFragment merchantFragment=new MerchantFragment(); 
    final StoreFragment storeFragment=new StoreFragment(); 
    final ProfileFragment profileFragment=new ProfileFragment(); 

    BottomBar bottomBar=(BottomBar) findViewById(R.id.bottomBar); 
    bottomBar.setOnTabSelectListener(new OnTabSelectListener() { 
     @Override 
     public void onTabSelected(@IdRes int tabId) { 
      if (tabId == R.id.tab_event) { 
       getSupportFragmentManager() 
         .beginTransaction() 
         .replace(R.id.contentContainer, eventFragment, eventFragment.getClass().getName()) 
         .commit(); 
      } 
      else if(tabId == R.id.tab_blood){ 
       getSupportFragmentManager() 
         .beginTransaction() 
         .replace(R.id.contentContainer, bloodFragment, bloodFragment.getClass().getName()) 
         .commit(); 
      } 
      else if(tabId == R.id.tab_merchant){ 
       getSupportFragmentManager() 
         .beginTransaction() 
         .replace(R.id.contentContainer, merchantFragment, merchantFragment.getClass().getName()) 
         .commit(); 
      } 
      else if(tabId == R.id.tab_store){ 
       getSupportFragmentManager() 
         .beginTransaction() 
         .replace(R.id.contentContainer, storeFragment, storeFragment.getClass().getName()) 
         .commit(); 
      } 
      else if(tabId == R.id.tab_profile){ 
       getSupportFragmentManager() 
         .beginTransaction() 
         .replace(R.id.contentContainer, profileFragment, profileFragment.getClass().getName()) 
         .commit(); 
      } 
     } 
    }); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
} 

@Override 
public void onBackPressed() { 
    if (doubleBackToExitPressedOnce) { 
     super.onBackPressed(); 
     finish(); 
    } 

    this.doubleBackToExitPressedOnce = true; 
    Toast.makeText(this, "Please press BACK again to exit", Toast.LENGTH_SHORT).show(); 

    new Handler().postDelayed(new Runnable() { 

     @Override 
     public void run() { 
      doubleBackToExitPressedOnce=false; 
     } 
    }, 2000); 
} 

}

我的问题是,当我打开另一个片段我的第一个片段装载完成之前,我会得到一个错误。发生错误的原因是当进程完成时,我在另一个片段中。所以我想在我打开另一个片段时冻结片段,并在再次打开片段时恢复过程。我有问题在我的代码中实现它。请帮帮我 。先谢谢了。

回答

0

解决方案是在打开新的碎片状态时保存原始碎片状态。

为了节省您可以使用片段状态:

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    ... 
    if (savedInstanceState != null) { 
    //Restore the fragment's state here 
    } 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 

    //Save the fragment's state here 
}` 
+0

我应该填什么呢?对不起,我是新手。所以,我需要更多的解释。我应该用什么样的代码来保存片段和恢复片段? –

+0

你可以看到这里:http://stackoverflow.com/questions/22505327/android-save-restore-fragment-state它可以帮助你吗? –

相关问题