Il y a quelques options pour ce que vous essayez d'accomplir. Personnellement, je vous recommande d'implémenter votre propre adaptateur (très probablement dans ce cas en développant SimpleCursorAdapter) et d'encapsuler les mises à jour de la rotation du texte à distance et de la boussole à l'intérieur de celle-ci.
Pour faciliter la gestion des ressources, vous devez probablement créer un objet SensorListener et LocationListener dans l'activité qui hébergera ListView. Chaque fois que vous recevez une mise à jour, appelez votre méthode updateCompassAndLocation
depuis votre classe Adapter. À partir de cette méthode, vous avez deux options:
Passez en revue chacun des éléments composant la collection de données représentée et modifiez le graphique de la boussole et le texte de distance, ou enregistrez simplement l'emplacement et l'en-tête en tant que variables dans la classe et appelez notifyDataSetChanged
pour forcer l'adaptateur à mettre à jour les vues. dans la méthode getView
. Dans les deux cas (en particulier le dernier), vous devrez définir le texte de distance et les valeurs de boussole de titre dans 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);
}
Désolé pour le retard. J'ai essayé votre solution il y a quelques mois et j'en étais très satisfait. Merci beaucoup! –
@Waza_Be ce serait génial si vous pouvez poster la solution que vous avez mis en œuvre pour cela, je suis également en train d'essayer de faire la même chose, je suis confronté à des problèmes avec la rotation de la boussole.Merci .. – dharan