0

我正在开发一个结合了 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 中获取数据Cursor cursor = dbAdaptor.getRssItems(channelid);(获取 RssItems 只是从 SQL 加载我们想要在屏幕上呈现的数据)。但是,我在同一个活动中有一些底部,如果我按下它,它将更改 SQL 中的值,这应该会影响它检索的数据。(比如有一个栏目决定这些项目的颜色是什么,原来是白色的,按了之后应该是蓝色了真实呈现还是一样的颜色。我曾尝试使用adapter.swapCursor(dbAdapter.getRssItems(id));在底部每次按下按钮时更新光标,但它会让我原来的显示消失(可能是因为原来的适配器丢失了它的光标,所以它什么都不能显示),我必须重新加载该页面才能获得正确的输出。有没有办法可以立即更新输出?感谢您提前回复=)

4

2 回答 2

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 不会。

于 2012-04-14T19:51:15.613 回答
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();

    }
  };
于 2012-04-14T20:22:59.873 回答