Android:覆盖onCreateView的正确方法是什么?

时间:2015-07-20 21:39:23

标签: android animation transition

我目前的问题是我试图触发Animator在两个活动之间转换。我的目标是创建从一个Activity到另一个Activity的循环显示过渡。

我开始收到此错误:“无法在独立视图上启动此动画制作工具!”

我正在环顾Stack Overflow并发现:Cannot start this animator on a detached view! reveal effect

一个解释似乎是第二个活动的观点尚未夸大,这就是动画师无法启动的原因。

线程中的人使用此作为解决方案:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    // Inflate the layout for this fragment
    final View view = inflater.inflate(R.layout.fragment_map_list, container, false);
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        view.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
            @TargetApi(Build.VERSION_CODES.LOLLIPOP)
            @Override
            public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                v.removeOnLayoutChangeListener(this);
                toggleInformationView(view);
            }
        });
    }
    return view;
}

但是,我对这里发生的事情有点困惑。看起来他也在夸大活动的布局。如果是这样的话,我不应该打电话:

setContentView(R.layout.activity_bnew_account);

在Activity的onCreate方法中?我是否应该在重写的onCreateView中使用布局inflater来扩展活动布局?感谢您提供有关如何解决此问题的任何建议。

1 个答案:

答案 0 :(得分:1)

onCreateView是Fragments上的一种方法,请参阅文档here

没有活动的等价物,setContentView会在你的布局上调用inflate。

该活动代码的粗略等效项将是(其中R.id.rooViewId是您的活动布局中根视图的ID):

@Override 
public View onCreate (Bundle savedInstanceState) {
    setContentView(R.layout.activity_bnew_account);
    // Inflate the layout for this fragment
    final View view = findViewById(r.id.rootViewId);
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        view.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
            @TargetApi(Build.VERSION_CODES.LOLLIPOP)
            @Override
            public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                v.removeOnLayoutChangeListener(this);
                toggleInformationView(view);
            }
        });
    }
}