2012-03-09 51 views
0

我做了一个视图,命名为菜单。我已经把它变成了一个单身人士。这是它的构造函数:查看不再显示在其他acitivites

private Menu(Activity cx) { 
    super(cx); 
    this.context = cx; 
    // something = AsyncTaskGetAllStreams.numberOfStreams; 
    LayoutInflater li = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    li.inflate(R.layout.menu, this, true); 
    setActivity(cx); 
    initUI(); 
    initUI(MyStreamsActivity.streamsJoinedByUser2.length); 
    assignVal(); 
} 

我遇到的问题是,一旦这个布局的活动设置它显示了该活动,并在其他任何它告诉我这在logcat中:

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
对于您的参考堆栈跟踪从我的按钮的onClick()开始。这是我处理的代码onClick()

Intent intent = new Intent(activity, MyPostActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
activity.startActivity(intent); 

为什么会发生这种情况?应该做什么?

+1

请参阅http://stackoverflow.com/questions/6371277/help-to-resolve-exception-the-specified-child-already-has-a-parent-you-must-ca – Vivek 2012-03-09 14:02:45

回答

0

我认为在这里使用单例设计模式是不正确的。这也是导致你的问题。一个视图只能有一个父视图,并且在上面的示例中,您将视图膨胀为父视图 - 所以在将视图从当前父视图中移除之前,您无法再执行此操作。

在这种情况下,您的单例使用会打破Android框架的灵活性。不要对抗SDK,让它为你工作。

+0

如果我使用它其他方式,即创建一个对象在我需要它的每一个活动,然后'setContentView(mMenu)'它创建一个不需要的延迟。有时延迟太大,屏幕变得空白,即旧的活动消失,下一个还没有出现。我想以某种方式减少或消除这种延迟。 – prometheuspk 2012-03-09 14:24:22

+0

@ Prometheus87那么如果存在延迟,你在代码的哪里有问题。使用单例实例只会复合这些问题。你有没有尝试调试导致延迟的原因?可能有些事情你没有意识到 - 如果延迟会导致屏幕熄灭,可能会发生这种情况。真的有很多事情会导致这种情况,所以代码中必须有错误。 – jjNford 2012-03-09 14:32:04