繁体   English   中英

如何动态更新适配器的活动?

[英]How to dynamic update the adapter for activities?

我正在开发一个结合了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);行获取数据Cursor cursor = dbAdaptor.getRssItems(channelid); (获取RssItems只是从SQL加载我们要在屏幕上显示的数据)。 但是,在同一活动中我遇到了一些麻烦,如果我按一下,它将更改SQL中的值,这将影响它检索的数据。 (例如,有一个列决定这些项目的颜色,它最初设置为白色,在我按此按钮后,它应该是蓝色。)但是,一旦按一下,似乎虽然SQL中的数据已更改,但是真实的表现仍然是相同的颜色。 我曾尝试使用adapter.swapCursor(dbAdapter.getRssItems(id)); 每次按下按钮时都会在底部更新光标,但这会使我的原始显示消失(可能是因为原始适配器丢失了光标,所以它无法显示任何内容),我必须重新加载该页面才能获得正确的输出。 有没有一种方法可以立即更新输出? 感谢您的提前回复=)

您将必须更新适配器中的光标。 您可以拨打以下电话:

// 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不会自动关闭。

尝试这个...

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

    }
  };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM