Java 片段加载动画don';在Android中完成startactivity意图之前,不要启动

Java 片段加载动画don';在Android中完成startactivity意图之前,不要启动,java,android,android-fragments,Java,Android,Android Fragments,有两种活动,即主活动和重播活动。当我在主活动中单击打开的书时,屏幕上会出现一个加载片段,直到阅读活动完全加载 在活动主界面中,活动阅读打开单击事件: @Override public void onClick(View v) { FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction() // fragment fade in e

有两种活动,即主活动和重播活动。当我在主活动中单击打开的书时,屏幕上会出现一个加载片段,直到阅读活动完全加载

在活动主界面中,活动阅读打开单击事件:

@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线程之外创建fragmet时出错。此外,我还必须在主活动中创建片段,因为阅读活动有许多其他片段与onActivityCreated()连接


创建
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.
    }
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u read\u book);
AddLoadingFragment();
新建AsyncLoading().execute();
}
类AsyncLoading扩展了AsyncTask{
公共图书馆{
超级();
}
@凌驾
受保护的字符串背景(字符串…字符串){
//只准备后台进程!从数据库获取数据或构建Rcyvlerview适配器。
返回null;
}
@凌驾
受保护的void onPostExecute(字符串s){
super.onPostExecute(s);
//doInBackground已经完成,是时候准备ui线程进程了。构建RecyclerView或一些ui工具。
}
}

您是否尝试过在透明背景下启动新活动,并在新活动完全加载时设置所需的颜色?新活动可能与您要显示的片段重叠,因为它属于上一个活动。第二个活动在重叠1-2秒后突然打开是不可能的,我必须添加加载片段,因为第二个活动延迟。您是否尝试通过调用finish()强制完成第一个活动;在调用context.startActivity(intent)之前和之后;用finish()关闭第一个活动并打开带有片段的应用程序,看起来非常糟糕:)您可以在片段管理器中将回调设置为backbackback更改。尝试在回调方法内部启动readbookactivity。没错,它正在工作,但加载的目的是为了节省时间,BookLoadingFragment因动画而丢失300毫秒。动画片段使用主线程,启动活动也使用主线程。当然,您说过“它在没有setCustomAnimations()的情况下出现”。它工作正常。因为主线程不能同时做很多事情。不幸的是,建议按顺序运行。很抱歉,无法提供任何解决方案
@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.
    }
}