如何以编程方式将列表视图滚动到 android 中的特定位置
how to scroll listview to specific position in android programmatically
我尝试让 listview 滚动到位置,我已经尝试了所有可能的功能,但都不起作用
更多代码解释
首先:我在地图上放置标记然后调用列表适配器
其次 L 如果用户单击地图上的标记,列表视图应将所选位置显示为单击的标记
private void Putting_places_on_Map(final List<PlaceModel> Places) {
// TODO Auto-generated method stub
for (int i = 0; i < Places.size(); i++) {
LatLng place_loc = new LatLng(Double.parseDouble(Places.get(i)
.getLatitude()), Double.parseDouble(Places.get(i)
.getLongitude()));
map.addMarker(new MarkerOptions().position(place_loc).icon(
BitmapDescriptorFactory
.fromResource(R.drawable.glossygreencirclemarker)));
}
// when marker clicked
map.setOnMarkerClickListener(new OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
// TODO Auto-generated method stub
LatLng PlaceLocation = marker.getPosition();
int selected_marker=-1;
for (int i = 0; i < Places.size(); i++) {
if (PlaceLocation.latitude == Double.parseDouble(Places
.get(i).getLatitude())
&& PlaceLocation.longitude == Double
.parseDouble(Places.get(i).getLongitude())) {
selected_marker=i;
}
}
Update_List_Places(Places, selected_marker);
return false;
}
});
}
private void Update_List_Places(List<PlaceModel> Places,
int selected_marker_position) {
// TODO Auto-generated method stub
list_places_returned = true;
ListPlacesNearbyAdapter placesNearbyAdapter = new ListPlacesNearbyAdapter(
(ArrayList<PlaceModel>) Places, activity,
selected_marker_position);
placesNearbyAdapter.notifyDataSetChanged();
if(selected_marker_position != -1){
//listview_nearby_locations.setSelection(selected_marker_position);
//listview_nearby_locations.smoothScrollToPosition(selected_marker_position);
//listview_nearby_locations.setSelectionFromTop(selected_marker_position, 100);
int y= selected_marker_position*40;
listview_nearby_locations.scrollTo(0,y);
}
listview_nearby_locations.setAdapter(placesNearbyAdapter);
}
看这张照片
对于直接滚动:
getListView().setSelection(21);
为了平滑滚动:
getListView().smoothScrollToPosition(21);
取自此处:Programmatically scroll to a specific position in an Android ListView
使用下面的代码..
context.yourListView.smoothScrollToPosition(10);
试试这个:
listview_nearby_locations.setSelection(9);
谢谢你们,我用了这个
Runnable runnable = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if(selected_marker_position != -1){
listview_nearby_locations.setSelection(selected_marker_position);
}
}
};
runnable.run();
我尝试让 listview 滚动到位置,我已经尝试了所有可能的功能,但都不起作用
更多代码解释 首先:我在地图上放置标记然后调用列表适配器 其次 L 如果用户单击地图上的标记,列表视图应将所选位置显示为单击的标记
private void Putting_places_on_Map(final List<PlaceModel> Places) {
// TODO Auto-generated method stub
for (int i = 0; i < Places.size(); i++) {
LatLng place_loc = new LatLng(Double.parseDouble(Places.get(i)
.getLatitude()), Double.parseDouble(Places.get(i)
.getLongitude()));
map.addMarker(new MarkerOptions().position(place_loc).icon(
BitmapDescriptorFactory
.fromResource(R.drawable.glossygreencirclemarker)));
}
// when marker clicked
map.setOnMarkerClickListener(new OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
// TODO Auto-generated method stub
LatLng PlaceLocation = marker.getPosition();
int selected_marker=-1;
for (int i = 0; i < Places.size(); i++) {
if (PlaceLocation.latitude == Double.parseDouble(Places
.get(i).getLatitude())
&& PlaceLocation.longitude == Double
.parseDouble(Places.get(i).getLongitude())) {
selected_marker=i;
}
}
Update_List_Places(Places, selected_marker);
return false;
}
});
}
private void Update_List_Places(List<PlaceModel> Places,
int selected_marker_position) {
// TODO Auto-generated method stub
list_places_returned = true;
ListPlacesNearbyAdapter placesNearbyAdapter = new ListPlacesNearbyAdapter(
(ArrayList<PlaceModel>) Places, activity,
selected_marker_position);
placesNearbyAdapter.notifyDataSetChanged();
if(selected_marker_position != -1){
//listview_nearby_locations.setSelection(selected_marker_position);
//listview_nearby_locations.smoothScrollToPosition(selected_marker_position);
//listview_nearby_locations.setSelectionFromTop(selected_marker_position, 100);
int y= selected_marker_position*40;
listview_nearby_locations.scrollTo(0,y);
}
listview_nearby_locations.setAdapter(placesNearbyAdapter);
}
看这张照片
对于直接滚动:
getListView().setSelection(21);
为了平滑滚动:
getListView().smoothScrollToPosition(21);
取自此处:Programmatically scroll to a specific position in an Android ListView
使用下面的代码..
context.yourListView.smoothScrollToPosition(10);
试试这个:
listview_nearby_locations.setSelection(9);
谢谢你们,我用了这个
Runnable runnable = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if(selected_marker_position != -1){
listview_nearby_locations.setSelection(selected_marker_position);
}
}
};
runnable.run();