有几个选择,你想实现什么.就个人而言,我建议您实现自己的适配器(在这种情况下很可能通过扩展SimpleCursorAdapter),并将更新封装在距离文本和罗盘旋转范围内.
为了帮助资源管理,您可能希望在将承载ListView的Activity中创建一个SensorListener和LocationListener.每当您从适配器类中收到更新调用自动滚动的updateCompassAndLocation方法.
从那个方法你有两个选择.对组成所收集数据的每个项目进行迭代,并修改罗盘图形和距离文本,或者简单地将当前位置和标题记录为类中的变量,并调用notifyDataSetChanged强制适配器更新视图本身在getView方法内.在任一情况下(特别是后者),您需要在getView中设置距离文本和航向罗盘值.
@Override
public View getView(int position,View convertView,ViewGroup parent) {
LinearLayout myView;
MyPOI item = getItem(position);
Location poiLocation = item.getLocation;
int compassHeading = // Calculate heading relative to current heading
float distance = // Calculate distance to POI
if (convertView == null) {
myView = new LinearLayout(getContext());
String inflater = Context.LAYOUT_INFLATER_SERVICE;
LayoutInflater vi = (LayoutInflater)getContext().getSystemService(inflater);
vi.inflate(resource,myView,true);
} else {
trainView = (LinearLayout) convertView;
}
TextView distanceView = (TextView)trainView.findViewById(R.id.distance);
ImageView compassView = (ImageView)trainView.findViewById(R.id.compass);
distanceView.setText(String.valueOf(distance);
compassView.setImageLevel(compassHeading);
}