簡體   English   中英

片段加載 animation 直到在 Android 中完成 startactivity 意圖后才開始

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

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