[英]Fragment loading animation don't start until startactivity intent completed in Android
有兩個活動,主要和reding。 當我在主要活動中單擊打開的書時,屏幕上應該會出現一個加載片段,直到閱讀活動完全加載。
在activity main中,activity讀取打開點擊事件:
@Override
public void onClick(View v) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
// fragment fade in enough
.setCustomAnimations(R.anim.fade_in, 0, 0, 0)
// main_root in activity main.
.add(R.id.main_root, new BookLoadingFragment(), "BookLoaderFragment")
.addToBackStack("BookLoaderFragmentStackTag")
.commit();
fragmentManager.executePendingTransactions();
Intent intent = new Intent(context, ReadBookActivity.class);
context.startActivity(intent);
}
所以通過上面的代碼,在閱讀活動完全打開之前,加載片段不會出現(它沒有 setCustomAnimations() 出現)。 我嘗試為片段創建新線程或異步任務,但在創建 ui 線程之外不允許的片段時出錯。 我還必須在主要活動中創建片段,因為閱讀活動有許多其他片段與 onActivityCreated() 相關聯。
public final class BookLoadingFragment extends Fragment {
...
public void onViewCreated(@NotNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Intent intent = new Intent(this.getContext(), ReadBookActivity.class);
startActivity(intent);
}
}
BookLoadingFragment
創建后啟動ReadBookActivity
您的 BookLoadingFragment 凍結,因為主 ui 線程不再處於活動狀態,您無法再對其進行處理。 您應該在加載的活動中添加加載片段並顯示加載片段,直到使用 AsyncTask 加載第二個活動。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_read_book);
AddLoadingFragment();
new AsyncLoading().execute();
}
class AsyncLoading extends AsyncTask<String,Integer,String> {
public AsyncAppOpen() {
super();
}
@Override
protected String doInBackground(String... strings) {
// Preapare background process only! Get data from Database or build Rcyvlerview adapter.
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
// doInBackground finished and it's time to preapare ui thread process. Build RecyclerView or some ui tools.
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.