私は、SQLとアダプタを組み合わせたアプリケーションを開発中です。主な問題は、データベースを更新すると、アダプターに自分の更新が直接反映されないことです。あなたが見ることができるように、このコードは行Cursor cursor = dbAdaptor.getRssItems(channelid);
(取得RssItemsだけのデータをロードしている私たちはSQLから画面上に提示したい)でSQLからデータを取得アダプターをアクティビティー用に動的に更新する方法は?
public class RSSItemActivity extends ListActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.rssitem);
long channelid = getIntent().getExtras().getLong(RSSReaderApp.CHANNEL_KEY);
DBAdaptor dbAdaptor = ((RSSReaderApp)getApplication()).getDBAdaptor();
Cursor cursor = dbAdaptor.getRssItems(channelid);
adapter = new RSSItemAdapter(this, R.layout.rssitemview, cursor);
setListAdapter(adapter);
}
:ここでは、コードです。しかし、私は同じアクティビティにいくつかのボトムを持っています。これを押すと、SQLの値が変更され、取得するデータに影響します。 (たとえば、これらのアイテムの色は何かを決める列がありますが、最初は白に設定されていますが、それを押すと青色になります)。実際のプレゼンテーションはまだ同じ色です。私は、ボタンを押すたびにカーソルを更新するために底面にadapter.swapCursor(dbAdapter.getRssItems(id));
を使用してみましたが、元のディスプレイが消えてしまいます(元のアダプタがカーソルを失って何も表示しない可能性があるため)。正しい出力を得る。即座に出力を更新できる方法はありますか?事前にお返事ありがとう=)
おかげで、私はちょうど結果は奇妙になって、最初の数回のために働くだろうと思われる、ことを試してみました。(私はまだいくつかクリックした後、出力を失いました)私が実際にやる方法は、新しい意図を開いて新しいものを表示することです。私がリストに戻ったとき、初めて動作しますが、別のページへのリンクを押して戻ってくると、それはちょうど壊れています。少し奇妙だが、まだ感謝 – JLTChiu
onResume()(およびonPause())をオーバーライドしましたか?インテントで新しいアクティビティをアクティビティすると、現在のアクティビティが一時停止して状態が失われます。 onResume()では、データベースから再度データをロードすることができます。 – dennisg
私はそれをしなかったので、私はonResume()をオーバーライドして、データを再度ロードするように頼むべきですか?毎回このページに戻ってくるので、結果が最も更新されていることを確認できますか? – JLTChiu