我是Android开发的新手......来自iPhone和.Net背景。我见过与此问题非常相似的问题,但没有一个问题涉及SimpleCursorAdapter。
我有一个基本的ListActivity,它使用Cursor将SQLite查询中的数据绑定到我的ListView:
ListAdapter adapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_list_item_1,
c,
new String[] {"name"},
new int[] {android.R.id.text1});
setListAdapter(adapter);
然后点击某个项目时:
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
//Difference between this:
Cursor c = (cursor)l.getItemAtPosition(position);
//and this??
Cursor c = (Cursor)l.getAdapter().getItem(position);
int categoryId = c.getInt(0);
}
这是获取所选元素的id的正确方法吗?这看起来很奇怪,因为我不认为我可以在数据库关闭后使用我的光标(这是在我绑定之后)。当我无法找到从该ID中获取实际项目的方法时,传入ID的重点是什么?另外,我不明白为什么getItemAtPosition()会返回一个游标......游标被绑定到整个列表;不只是一排。最后,如果这是正确的,获得光标的两种方式之间是否存在差异?感谢。
答案 0 :(得分:82)
所以有几点:在您获取光标后,您想要调用startManagingCursor
。这将光标的生命周期与Activity的生命周期联系起来(因此当Activity被销毁时,光标会被关闭/清理)。
startManagingCursor(c);
ListAdapter adapter = new SimpleCursorAdapter(
this,
android.R.layout.simple_list_item_1,
c,
new String[] {"name"},
new int[] {android.R.id.text1});
setListAdapter(adapter);
此外,数据库不是关闭,Cursor通常保持与DB的实时连接(因此ListView可以滚动并执行这种性质的事情,可能需要将来访问Cursor的内容
对于您的核心问题,在onListItemClick
中执行此操作的最简单方法是:
Cursor c = ((SimpleCursorAdapter)l.getAdapter()).getCursor();
c.moveToPosition(position);
然后,您可以使用c.getLong(0)
来获取ID(假设您将id列作为第一列获取,通常就是这种情况)。但是,请注意,id作为签名的一部分传入(请参阅public void onListItemClick(ListView l, View v, int position, long id)
中的最后一个参数),因此您实际上不需要再次获取它(但如果您想要刻录循环,您肯定可以) 。要访问其他列,您可以执行相同的操作,只需更改列索引。
希望有所帮助。
答案 1 :(得分:0)
另一种方式:
$(function() {
var lastMin;
var lastMax;
var maxRange = 12 * 30 * 24 * 3600 * 1000; //12 month
$('#container').highcharts('StockChart', {
scrollbar: {
liveRedraw: false
},
xAxis: {
events: {
afterSetExtremes: function(e) {
var max = this.max,
min = this.min;
if (lastMin && lastMax) {
if(max-min > maxRange) {
if (min < lastMin) {
min = max - maxRange;
} else {
max = min + maxRange;
}
}
}
var x = this;
setTimeout(function(){
x.setExtremes(min,max); //chart xAxis
}, 1);
lastMin = min;
lastMax = max;
}
}
},
rangeSelector: {
selected: 1
},
series: [{
name: 'USD to EUR',
data: usdeur
}]
});
});