![](/img/trans.png)
[英]How to update the RecyclerView Adapter outside the Adapter Class
[英]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.