Как добавить текст в конкретную позицию в пользовательском адаптере в Android

введите описание изображения здесь Я создаю приложение для Android, которое заполняет список координат GPS, который был введен пользователем с помощью специального адаптера, подобного этому

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

Если пользователь выбирает флажок 1, мне нужно найти расстояние от флажка 1 широта до флажка 2, флажка 3, флажка-4 широты. Здесь мне нужно отобразить текст результата в поле Text их соответствующей позиции, но здесь я получаю результат только в последней позиции, может ли кто-нибудь сказать мне, как этого добиться FYI: [! [введите описание изображения здесь] [2]] [2] Этот sc объяснит вам в деталь. Если я проверю одно значение, оно обновляло результат только по последнему значению, но мне нужно обновить и отобразить результат для всех данных Это мой код

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;
}

person lakshmansundeep    schedule 25.04.2016    source источник
comment
Сначала изучите кое-что о том, как создать класс адаптера, а затем напишите код.   -  person Nigam Patro    schedule 25.04.2016
comment
У меня не так много времени, братан, чтобы читать этот документ. Можешь мне помочь с этим вопросом @Nigam Patro   -  person lakshmansundeep    schedule 25.04.2016
comment
Внутри Locations_modle добавьте переменную для расстояния. И всякий раз, когда пользователь устанавливает флажок, обновляйте эту переменную в списке.   -  person Nigam Patro    schedule 25.04.2016
comment
Да, я сделал это, но получаю пустые значения @Nigam Patro   -  person lakshmansundeep    schedule 25.04.2016
comment
Я обновил getView() метод вашего кода. Пожалуйста, прочтите ответ.   -  person Nigam Patro    schedule 25.04.2016


Ответы (3)


Измените свои getView() методы примерно так

@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;
}
person Nigam Patro    schedule 25.04.2016
comment
Значит для чего, вы получаете пустые значения? - person Nigam Patro; 25.04.2016
comment
Измените objects.get(i).setDistance(distance); эту часть кода внутри цикла for на этот objects.get(i).setDistance(String.valueOf(distance)); - person Nigam Patro; 25.04.2016
comment
Извините за опоздание, проверю - person lakshmansundeep; 25.04.2016
comment
Если я напишу notifyOndatasetchanged, это не позволяет мне проверять флажки - person lakshmansundeep; 25.04.2016
comment
Я отредактировал свой код и снимок экрана в вопросе, посмотрите на это - person lakshmansundeep; 25.04.2016
comment
Ваш код работает нормально, но когда я устанавливаю флажок, он не показывает свое отмеченное состояние. Не могли бы вы мне помочь с этим @ Nigam Patro - person lakshmansundeep; 25.04.2016
comment
Поместите эту часть кода if (position == selectedPostion) { check_locations.setChecked(true); } else { check_locations.setChecked(false); } после check_locations.setOnCheckedChangeListener(). - person Nigam Patro; 25.04.2016
comment
Нет смысла, братан, который я написал после того, как слушатель oncheckedchange все еще не проверяет флажки и какую позицию здесь выбрана @ Nigam Patro - person lakshmansundeep; 25.04.2016
comment
Добавьте android:descendantFocusability="blocksDescendants" в основной макет вашего XML-файла строки. и проверьте. - person Nigam Patro; 25.04.2016
comment
Все еще бесполезен, братан @Nigam Patro - person lakshmansundeep; 25.04.2016
comment
Какая позиция здесь выбрана, братан - person lakshmansundeep; 25.04.2016
comment
selectedposition - это строка, которую вы выбрали. - person Nigam Patro; 25.04.2016
comment
Как я могу получить это внутри прослушивателя проверенных изменений @Nigam Patro - person lakshmansundeep; 25.04.2016
comment
Хорошо, братан, теперь я понял, что все работает нормально ... спасибо за терпеливый ответ - person lakshmansundeep; 25.04.2016
comment
Вам может понравиться мой ответ? - person Nigam Patro; 25.04.2016
comment
Ой ! я забыл и спасибо за помощь за голосование мне нужна репутация 15 извините за это - person lakshmansundeep; 25.04.2016

Ты накачал locations_row как общий вид. Это будет каждый раз создавать новый элемент. Вам необходимо повторно использовать существующие элементы. Я имею в виду:

    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();
    }

Вы даже не использовали ни View convertView, ни final ViewGroup parent. Итак, начните с поиска шаблона ViewHolder для адаптера listview.

person JamesNickel    schedule 25.04.2016
comment
Вы найдете гораздо больше полезных примеров кодов, выполнив поиск в Google по этому полужирному тексту. - person JamesNickel; 25.04.2016
comment
Хорошо, братан, я сделаю это позже, но у меня сейчас мало времени @ JameNickel - person lakshmansundeep; 25.04.2016

Убедитесь, что ваш xml-макет уникален, и вы правильно используете объект Distance_text Textview. Может, нужно обновить объект в цикле for?

Для меня этот ваш код немного труден для чтения, но где вы используете родительский элемент ViewGroup и View convertView? Из

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

Для моего краткого обзора вы получаете только 1 экземпляр вашего (TextView) locations_row.findViewById(R.id.txt_distance);, и это последняя позиция в вашем обзоре. Убедитесь, что он обновляется так, как вы хотите.

person Leolian    schedule 25.04.2016