我正在开发一个结合了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);
}
正如您所看到的,此代码从Cursor cursor = dbAdaptor.getRssItems(channelid);
行的SQL获取数据(get RssItems只是加载我们希望在SQL屏幕上显示的数据)。但是,我在同一个活动中有一些底部,如果按下它,它将更改SQL中的值,这应该影响它检索的数据。 (例如,有一列确定这些项目的颜色是什么,它最初设置为白色,在我按下它之后,它应该是蓝色。)但是,一旦我按下它,看起来虽然SQL中的数据被更改了,但是真实的演示文稿仍然是相同的颜色。我曾尝试在底部使用adapter.swapCursor(dbAdapter.getRssItems(id));
来每次按下按钮时更新光标,但它会让我的原始显示消失(可能是因为原始适配器丢失了它的光标,所以它什么也没显示),我必须重新加载该页面以获得正确的输出。有没有办法可以立即更新输出?感谢您提前回复=)
答案 0 :(得分:1)
您必须更新适配器中的光标。您可以拨打以下电话:
// Closes the old cursor as well.
adapter.changeCursor(dbAdapter.getRssItems(id));
// Notify the view that the underlying data has changed.
adapter.notifyDataSetChanged();
此外,与swapCursor()的区别在于changeCursor会自动关闭旧游标,而swapCursor则不会。
答案 1 :(得分:0)
试试这个......
runOnUiThread(returnResult);
private Runnable returnResult = new Runnable() {
@Override
public void run() {
if(array_list.size() > 0)
{
m_adapter.notifyDataSetChanged();
for(int i=0;i<array_list.size();i++)
m_adapter.add(array_list.get(i));
}
m_adapter.notifyDataSetChanged();
}
};