2012-03-09 12 views
0

メニューと呼ばれるビューを作成しました。私はそれをシングルトンにしました。これはそれのコンストラクタです:他のアクティビティーでもう一度表示されないビュー

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

答えて

0

シングルトンのデザインパターンを使用すると、ここで正しくないと思います。これはあなたの問題の原因ともなります。ビューには親が1つしかない場合があります。上の例では、ビューを親に膨らませています。そのため、現在の親から削除するまで、これを再度行うことはできません。

この場合のシングルトンの使用は、Androidのフレームワークの柔軟性を壊すことになります。 SDKと戦わないで、あなたのために働かせてください。

+0

を参照してください。つまり、必要なすべてのアクティビティにオブジェクトを作成し、 'setContentView(mMenu)'を実行すると、望ましくない遅延が発生します。時には、遅延が非常に大きく、画面が空白になる、すなわち古いアクティビティがなくなり、次のアクティビティがまだ表示されないことがあります。私はどういうわけかその遅れを減らしたり、なくしたりしたい。 – prometheuspk

+0

@ Prometheus87その後、遅延がある場合はコード内で問題が発生します。シングルトンインスタンスを使用すると、これらの問題のみが複合されます。遅れを引き起こしているものをデバッグしようとしましたか?あなたが気づいていないことが起こっているかもしれません。画面を黒くする遅延がある場合はおそらくそうです。実際にはこれが原因で発生する可能性がありますので、コード内で何かが間違っている必要があります。 – jjNford

関連する問題