简体   繁体   English

片段加载 animation 直到在 Android 中完成 startactivity 意图后才开始

[英]Fragment loading animation don't start until startactivity intent completed in Android

There are two activities which are main and reding.有两个活动,主要和reding。 When I click the open book in main activity, a loading fragment should be appear on screen until reading activity loaded completely.当我在主要活动中单击打开的书时,屏幕上应该会出现一个加载片段,直到阅读活动完全加载。

In activity main, activity reading open click event:在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);
}

So by the above code, loading fragment don't appear until reading activity opened completely (It appear without setCustomAnimations()).所以通过上面的代码,在阅读活动完全打开之前,加载片段不会出现(它没有 setCustomAnimations() 出现)。 I've tried creating new thread or async task for fragment but there was an error creating fragmet not allowed outside of ui thread.我尝试为片段创建新线程或异步任务,但在创建 ui 线程之外不允许的片段时出错。 Also I've to create fragment in main activity because reading activity has many other fragments attached it with onActivityCreated().我还必须在主要活动中创建片段,因为阅读活动有许多其他片段与 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);
   }
}

Start ReadBookActivity after BookLoadingFragment was created BookLoadingFragment创建后启动ReadBookActivity

Your BookLoadingFragment freezing because main ui thread is no longer at its activity, you cannot work on it anymore.您的 BookLoadingFragment 冻结,因为主 ui 线程不再处于活动状态,您无法再对其进行处理。 You should add loading fragment in what activity you load and show loading fragment until loaded second activity with AsyncTask.您应该在加载的活动中添加加载片段并显示加载片段,直到使用 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