Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 20.05.2013
Сообщений: 30

Повторение позиций в списке генерируемом адаптером

05.04.2017, 07:17. Показов 704. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть кастомный CityAutoCompleteAdapter - в нём метод

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public View getView(int position, View convertView, ViewGroup parent) {
        Log.i(className, " start - getView()");
        if(convertView == null){
            LayoutInflater inflater = LayoutInflater.from(mContext);
            convertView = inflater.inflate(android.R.layout.simple_dropdown_item_1line, parent, false);
        }
 
        CityJSON city = (CityJSON)getItem(position);
        TextView view = (TextView)convertView.findViewById(android.R.id.text1);
        view.setText(city.getName());
        Log.i(className, " end - getView()");
        return convertView;
    }
при дебаге переменная position доходит до 2 (0,1,2) и начинает снова с нуля. Соответственно CityJSON city = (CityJSON)getItem(position) здесь переменная city повторяется также. Поэтому происходит перебор по первым 3 городам из спсика, вместо перебора всего списка городов, несмотря на то, что в списке может быть более чем 3 города. Где подкрутить?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.04.2017, 07:17
Ответы с готовыми решениями:

Разница между встроенным Wi-Fi адаптером и флэш адаптером
Такая проблема: Купили Wi-Fi роутер. У родителей ноутбуки - скорость шикарная (доходит до 5 Мб/с). Тянуть кабель через всю квартиру для...

Обработка позиций отсутствующих в списке
В форме при выборе из списка номер пациента соответствующие данные отображаются в ячейках. Я хочу сделать чтобы при вводе в этот список...

Создать список позиций заданного элемента в исходном списке
VISUAL PROLOG 5.2. Вроде все сделал, только возникает ошибка компиляции, не могу понять в чем проблема: DOMAINS list = integer* ...

12
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
05.04.2017, 09:40
хрустальный шар просит весь код
0
2 / 2 / 0
Регистрация: 20.05.2013
Сообщений: 30
05.04.2017, 09:56  [ТС]
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public class CityAutoCompleteAdapter extends BaseAdapter implements Filterable{
 
    private static final int MAX_RESULTS = 10;
    private static final String className = CityAutoCompleteAdapter.class.getName();
    private final Context mContext;
    private List<CityJSON> mResults;
    private CreateShipmentPresenter presenter;
    private int countryId;
 
    public CityAutoCompleteAdapter(Context mContext, CreateShipmentPresenter presenter) {
        this.mContext = mContext;
        this.presenter = presenter;
        this.mResults = new ArrayList<CityJSON>();
    }
 
    public void setCountryId(int countryId) {
        this.countryId = countryId;
    }
 
    @Override
    public int getCount() {
        return mResults.size();
    }
 
    @Override
    public Object getItem(int index) {
        return mResults.get(index);
    }
 
    @Override
    public long getItemId(int position) {
        //return getItem(position);
        return position;
    }
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Log.i(className, " start - getView()");
        if(convertView == null){
            LayoutInflater inflater = LayoutInflater.from(mContext);
            convertView = inflater.inflate(android.R.layout.simple_dropdown_item_1line, parent, false);
        }
        CityJSON city = (CityJSON)getItem(position);
        TextView view = (TextView)convertView.findViewById(android.R.id.text1);
        view.setText(city.getName());
        Log.i(className, " end - getView()");
        return convertView;
    }
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
05.04.2017, 09:58
getItemId() этот метод убрать
нельзя вот просто так взять и присвоить что-то от балды как id вьюшки
0
2 / 2 / 0
Регистрация: 20.05.2013
Сообщений: 30
05.04.2017, 10:17  [ТС]
Он лишний - согласен. Это понятно конечно. А вот что насчёт получения в getItem() всех позиций из mResults? position максимальная равна числу максимально помещаемых элементов в списке - у меня их 3. А дальше снова всё с нулевой позиции начинается. Как с эим быть? Что скажет хрустальный шар?
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
05.04.2017, 10:29
просто убрать метод и попробовать запустить программу не?
0
2 / 2 / 0
Регистрация: 20.05.2013
Сообщений: 30
05.04.2017, 10:41  [ТС]
)) он лишний только потому что я его нигде не использую, но при наследовании класса Adapter это обязательный абстрактный метод, который должен быть переопределён в классе наследнике
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
05.04.2017, 10:45
точно
тогда по-идее там нужно возвращать что-то уникальное для каждого элемента
например mResults.get(position).hashCode();
0
2 / 2 / 0
Регистрация: 20.05.2013
Сообщений: 30
05.04.2017, 11:03  [ТС]
В том то и дело - всё упирается в position. Он сбрасывается на ноль после нескольких раз и снова с первого города начинается.
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
05.04.2017, 11:08
так он из-за этого и ходит по кругу что id не уникальные
что насчет попробовать возвращать hashCode?
0
314 / 257 / 81
Регистрация: 31.10.2016
Сообщений: 619
05.04.2017, 11:32
Цитата Сообщение от rub1n83 Посмотреть сообщение
mResults.size();
у вас какой? адаптер отталкивается только от этого значения. не вижу чтоб вы там в mResults что-то передавали. И еще вопрос, не относящийся к проблеме: что у вас делает CreateShipmentPresenter в адаптере?
0
2 / 2 / 0
Регистрация: 20.05.2013
Сообщений: 30
05.04.2017, 12:28  [ТС]
mResults.size() равен 18 - в mResults 18 городов. Presenter закоммнтировал - он не используется. Насчёт хождения по кругу - максимальное значение всегда равно количеству позиций списка, помещающихся в данный момент на экран. Если я в эмуляторе меняю Nexus One на Nexus 5 из-за более высокого разрешения количество выводимых на экран позиций увеличивается до 5 и по кругу уже бегать начинает от 0 до 4. Вот что нашёл на stackoverflow по заполнению списка:
http://stackoverflow.com/quest... nism-works

Добавлено через 3 минуты
то есть цикличность в данном случае - это стандартное поведение для списка - и так оно работает у всех. Если не сложно - проверьте у себя похожую конструкцию
0
314 / 257 / 81
Регистрация: 31.10.2016
Сообщений: 619
05.04.2017, 14:51
Все просто.
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
 
public class MainActivity extends AppCompatActivity {
 
 
    private List<String> burgers = Arrays.asList("50/50 burger", "Angus burger",
            "Australasian hamburgers", "Banquet burger", "Barbecue burger", "Butter burger",
            "Buffalo burger", "California burger", "Carolina burger", "Cheeseburger",
            "Chili burger", "Curry burger", "Green chile burger", "Hamdog", "Hawaii burger",
            "Jucy Lucy", "Kimchi burger", "Luther Burger", "Naan burger", "Pastrami Burger",
            "Patty melt", "Rice burger", "Salmon burger", "Slider", "Slopper", "Slugburger",
            "Steak burger", "Teriyaki burger", "Veggie burger");
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView listView = (ListView) findViewById(R.id.listView);
        BurgerAdapter adapter = new BurgerAdapter();
        adapter.setItems(burgers);
        listView.setAdapter(adapter);
    }
 
    private static class BurgerAdapter extends BaseAdapter {
 
        private List<String> mItems;
 
        public BurgerAdapter() {
            this.mItems = new ArrayList<>();
        }
 
        public void setItems(List<String> mItems) {
            this.mItems = mItems;
        }
 
        @Override
        public int getCount() {
            return mItems.size();
        }
 
        @Override
        public Object getItem(int position) {
            return mItems.get(position);
        }
 
        @Override
        public long getItemId(int position) {
            return position;
        }
 
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_dropdown_item_1line, parent, false);
            }
            String item = (String) getItem(position);
            TextView view = (TextView) convertView;
            view.setText(item);
            return convertView;
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.04.2017, 14:51
Помогаю со студенческими работами здесь

Сформировать список из позиций элемента, заданного параметром X, в списке L
Добрый день! Подскажите, пожалуйста, как правильно описать условие, чтобы в &quot;цикле&quot; пройти все элементы списка, а не только...

Найти элементы в списке, значение которых совпадает с номерами их позиций
Найти элементы в списке, значение которых совпадает с номерами их позиций в списке. Я практически не знаю, пролога, но нужно на завтра...

Найти элементы списка значение которых не совпадает с номерами их позиций в списке
Найти элементы списка значение которых не совпадает с номером их позиций в списке

Подсчет количества положительных чисел в списке и формирование списка с номерами позиций этих чисел
Подсчитайте количество положительных чисел в списке и сформируйте список с номерами позиций этих чисел.

Найти минимальное число в генерируемом массиве
Проблема образовалась. Завтра сдавать зачет, а найти минимальный элемент массива не могу. Программа до моих стараний работала как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru