1

いくつかの背景: 「データベースの編集」ビューを作成してから行を再度削除しているプログラムの一部に問題があります。「データベースの編集」ビューが表示するフィールドは、表示されるたびに異なります。編集データベース ビューはテーブル レイアウトであり、データベースの各行はテーブル レイアウトの行です。ユーザーが編集ビューを終了すると、ビューは次回のために行を破棄またはワイプすることになっています。

私の問題は、何を試しても、テーブルレイアウトの行を削除できないことです。関連するコードは次のとおりです。

xml ファイルで tablelayout のハンドルを取得する

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

レイアウトは別のクラスに渡され、そこで次のようにレイアウトに追加されます。

//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();

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

私はしばらくこれに苦労しました。tablelayout(xmlファイルなし)を動的に作成しようとし、インデックスを使用して各行(または1行のみ)を削除しようとしました。Hierarchy Viewer を使用して、すべてがそのテーブルレイアウトの子であることを確認しました (そうです)。誰かが洞察を持っているなら、それは大歓迎です。

4

2 に答える 2

2

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

行が削除されなかったのは、電話した直後にremoveAllViews()コンテンツ ビューを切り替えたためsetContentView(R.layout.main);です。この行をコメントアウトすると、子の削除コードが期待どおりに機能しました。Android のバックエンド最適化コードによって、removeAllViews()実行する必要がないと判断された、またはメモリ内のどこかで更新されたと思います。そして、この関数内で行われたすべての変更は適用されませんでした。

このすべてのコードを新しいアクティビティ (最初に実際に属していた場所) に配置します。しかし、他の誰かが同じ問題を抱えている場合に備えて、説明を提供したかった.

于 2012-05-13T19:36:45.250 に答える
1

行を削除した後、可視性をGONEに設定し、再びVisibleに戻してみてください。これにより、行の削除の不具合が修正されます。

于 2012-04-09T20:03:06.170 に答える