繁体   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