2016-04-25 10 views
0

enter image description here Ich schaffe Android App hinzuzufügen, die die Liste der GPS-Koordinaten, die vom Benutzer mit benutzerdefinierten Adapter wie dieseWie den Text an der bestimmten Position in der kundenspezifischen Adapter in android

SELECTION   LAT  LONG   DISTANCE 
------------------------------------------------- 
    checkbox1 123.4546  456.48751  Text 
    checkbox2 123.4546  456.48751  Text 
    checkbox3 123.4546  456.48751  Text 
    checkbox4 123.4546  456.48751  Text 

eingegeben wurde auffüllt Wenn der Benutzer die Checkbox 1 auswählt, muss ich den Abstand von der Checkbox 1 lat lang zu Checkbox 2, Checkbox 3, check-box-4 lat lang finden. Hier muss ich den Ergebnistext anzeigen das Feld von ihre jeweilige Position aber hier bekomme ich das Ergebnis nur an der letzten Position kann mir jemand sagen, wie man es erreicht FYI: [! [Bildbeschreibung hier eingeben] [2]] [2] Diese sc wird Ihnen erklären im Detail. Wenn ich den einen Wert überprüfen wurde das Ergebnis nur auf dem letzten Wert zu aktualisieren, aber ich brauche das Ergebnis für die gesamten Daten zu aktualisieren und anzuzeigen Dies ist mein Code

check_locations.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if (isChecked) { 

       latitude_string = location.getLatitude(); 
       longitude_string = location.getLongitude(); 
       baseLat_double = Double.parseDouble(latitude_string); 
       baseLong_double = Double.parseDouble(longitude_string); 
       location_a = new Location("Base position"); 
       location_a.setLatitude(Double.parseDouble(latitude_string)); 
       location_a.setLongitude(Double.parseDouble(longitude_string)); 
       location_b = new Location("End position"); 
       for (int i = 0; i < objects.size(); i++) { 
        finalLat_double = Double.parseDouble(objects.get(i).getLatitude()); 
        finalLong_double = Double.parseDouble(objects.get(i).getLongitude()); 
        location_b.setLatitude(finalLat_double); 
        location_b.setLongitude(finalLong_double); 
        distance = location_a.distanceTo(location_b); 
        distance = distance * 1.609344; 
        objects.get(i).setDistance(String.valueOf(distance)); 
        } 
       notifyDataSetChanged(); 
       distance_text.setText(location.getDistance()); 

      } 
     } 
    }); 


    return locations_row; 
} 
+0

Zuerst lernen Sie etwas über eine Adapter-Klasse, dann Code. –

+0

Ich habe nicht viel Zeit für das Lesen dieses Dokuments bro.can können Sie mir mit dieser Frage helfen @Nigam Patro – lakshmansundeep

+0

Inside 'Locations_modle' fügen Sie eine Variable für die Entfernung hinzu. Und wann immer der Benutzer das Kontrollkästchen aktiviert, wird diese Variable in der Liste aktualisiert. –

Antwort

1

ändern Sie bitte Ihre getView() Methoden so etwas wie diese Sie

@Override 
    public View getView(final int position, View convertView, final ViewGroup parent) { 

    final View locations_row = LayoutInflater.from(context).inflate(R.layout.layout_adapter_list_details, null); 
    final Locations_modle location = (Locations_modle) objects.get(position); 
    TextView text_cust_name = (TextView) locations_row.findViewById(R.id.txt_cust_name_heading); 
    TextView latitude = (TextView) locations_row.findViewById(R.id.txt_latitude); 
    latitude.setText(location.getLatitude()); 
    TextView longitude = (TextView) locations_row.findViewById(R.id.txt_longitude); 
    TextView distance_text = (TextView) locations_row.findViewById(R.id.txt_distance); 
    if (StringUtils.isEmpty(location.getDistance())) 
     distance_text.setText("DISTANCE"); 
    longitude.setText(location.getLongitude()); 
    text_cust_name.setText(location.getLocationName()); 
    CheckBox check_locations = (CheckBox) locations_row.findViewById(R.id.check_locations); 
    check_locations.setTag(position); 

    if (position == selectedPostion) { 
     check_locations.setChecked(true); 
    } else { 
     check_locations.setChecked(false); 
    } 
    check_locations.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if (isChecked) { 

       selectedPostion = (int) buttonView.getTag(); 

       latitude_string = objects.get(selectedPostion).getLatitude(); 
       longitude_string = objects.get(selectedPostion).getLongitude(); 

       baseLat_double = Double.parseDouble(latitude_string); 
       baseLong_double = Double.parseDouble(longitude_string); 

       location_a = new Location("Base position"); 
       location_a.setLatitude(Double.parseDouble(latitude_string)); 
       location_a.setLongitude(Double.parseDouble(longitude_string)); 

       location_b = new Location("End position"); 


       for (int i = 0; i < objects.size(); i++) { 
        finalLat_double = Double.parseDouble(objects.get(i).getLatitude()); 
        finalLong_double = Double.parseDouble(objects.get(i).getLongitude()); 
        location_b.setLatitude(finalLat_double); 
        location_b.setLongitude(finalLong_double); 
        distance = location_a.distanceTo(location_b); 
        distance = distance * 1.609344; 
        objects.get(i).setDistance(distance); 
       } 
       Locations_Adapter.this.notifyDataSetChanged(); 
      } 
     } 
    }); 

    return locations_row; 
} 
+0

Leere Werte erhalten man Kein Ergebnis – lakshmansundeep

+0

Für was bedeuten, erhalten Sie leere Werte? –

+0

Modify 'objects.get (i) .setDistance (Abstand);' dieser Teil des Codes innerhalb für Schleife zu diesem 'objects.get (i) .setDistance (String.valueOf (Abstand));' –

0

Ihr xml Layout überprüfen, ob Ihre Zeilen-ID ist eindeutig und Sie verwenden korrekt distance_text Textview-Objekt. Vielleicht müssen Sie das Objekt in der for-Schleife aktualisieren?

Für mich ist dieser Code etwas schwer zu lesen, aber wo verwenden Sie Ihre ViewGroup Eltern und View ConvertView? Von

@Override 
public View getView(final int position, View convertView, final ViewGroup parent) { 

Für meine schnellen Überblick erhalten Sie nur 1 Instanz Ihrer (TextView) locations_row.findViewById(R.id.txt_distance); und das ist die letzte Position auf Ihrer Ansicht. Stellen Sie sicher, dass es aktualisiert wird, wie Sie möchten.

1

locations_row als allgemeine Ansicht aufgeblasen. Dadurch wird jedes Mal ein neues Objekt erstellt. Sie müssen die vorhandenen Elemente wiederverwenden. Ich meine:

if (convertView == null) { 
     convertView = LayoutInflater.from(context).inflate(R.layout.layout_adapter_list_details, parent, false); 
     holder = new ViewHolder(convertView); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

Sie haben noch keine der so View convertView oder final ViewGroup parent verwenden, starten Sie von der Suche über ViewHolder Muster für Listview-Adapter.

+0

Kannst du erklären im detail mit code bitte – lakshmansundeep

+0

Sie werden eine menge mehr nützliche beispielcodes durch googeln dieses fettes text. – JamesNickel

+0

Ok, ich werde es später machen, aber ich habe jetzt nicht genug Zeit @ JameNickel – lakshmansundeep

Verwandte Themen