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