2012-04-09 17 views
1

背景: 私のプログラムの一部で「データベースの編集」ビューを作成していて、再度その行を削除するときに問題が発生しています。 「データベースの編集」ビューに表示されるフィールドは、表示されるたびに異なります。データベースビューの編集はテーブルレイアウトであり、データベースの各行はテーブルレイアウトの行です。ユーザが編集ビューを終了すると、そのビューは、次回のために行を配置または消去されるはずである。TableLayout内のTableRowの子を削除しないremoveAllViews()

私の問題は、私が試しても、私は削除するtablelayoutの行を取得することはできません。ここでは、コードのrelevent作品は以下のとおりです。

レイアウトは、彼らがこのようなレイアウトに追加されている別のクラスに渡され、

setContentView(R.layout.database_entry); 
TableLayout editorLayout = (TableLayout)findViewById(R.id.DatabaseLayout); 

xmlファイルにtablelayoutのハンドルを取得します。

//layout is the tablelayout from earler, passed into this function 
TableRow row = new TableRow(contex); 
row .setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
//stuff added to the row.... 
//... 
//... 
layout.addView(row); 

私はTablelayoutを拭くしようとすると、私はこのコード

TableLayout editorLayout = (TableLayout)findViewById(R.id.DatabaseLayout); 
editorLayout.removeAllViews(); 

を実行します私が何をしても、次にコードを編集するためにボタンを押すと、前の行と新しい行が表示されます。それらはテーブルから取り除かれません。エラーメッセージや有用なデバッグ情報は得られません。ただ機能していません。

私はしばらくの間これを苦労しました。テーブルレイアウト(xmlファイルなし)を動的に作成しようとしましたが、各行(または1つの行)をインデックスで削除しようとしました。私は階層ビューアを使ってすべてがそのテーブルレイアウトの子であることを確認しました。誰もが洞察力を持っている場合、それは非常に高く評価されるだろう。

+0

まだ誰もこれを見ているかどうかわかりません。しかし、私がremoveAllViews()を実行したときに見つかった問題に戻ると、 'mChildrenCount'の値は0に設定されていますが、 'mChildView'にある各子ビューのポインタが残っています。removeAllViews()子供のポインタを削除するには?私はソースそのものを調べ、問題を特定できるかどうか確認します。 – Ancantus

答えて

2

私は問題を理解することができました。まず、上記のコメントは少し間違っていました。mChildren配列には、削除したビューへのポインタは含まれていませんでした。彼らはそうしなければならなかったのと同じように、彼らは除外されました。

私の行が削除されなかった理由は、私がremoveAllViews()と呼んだ直後に、私はコンテンツビューsetContentView(R.layout.main);を切り替えたからです。私がこの行をコメントアウトしたとき、子コードを削除することが期待通りに機能しました。私は、いくつかのアンドロイドのバックエンド最適化コードは、removeAllViews()を実行する必要はなく、メモリのどこかで更新する必要があると判断しました。この機能の中で行われたすべての変更は適用されませんでした。

私は、このコードをすべて新しいアクティビティに入れます(実際には最初にあった場所です)。しかし、他の誰かが同じ問題を抱えている場合に備えて説明をしたかったのです。

1

行を削除した後で、可視性をGONEに設定してもう一度Visibleに戻してみてください。これにより、行のグリッチを修正する必要があります。

+0

それを試して、動作しませんでした。私は可視性をGONEに設定しようとしても、それでも効果はありませんでした。これは、私がeditorLayoutで正しいオブジェクトを取得していないかのようですが、デバッグを使用してオブジェクトの内部をチェックし、正しいIDを持っています。 – Ancantus

関連する問題