Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
AlexRu18
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 101
#1

Некорректное заполнение ListView - Программирование Android

06.11.2016, 01:10. Просмотров 230. Ответов 8
Метки нет (Все метки)

Есть 2 фрагмента, в первом лист заполняемый с помощью TypedArray. Когда я перехожу по позиции листа и возвращаюсь назад, то лист заполняется заново и получается вместо 20 позиций 40. Как можно пофиксить?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2016, 01:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Некорректное заполнение ListView (Программирование Android):

Заполнение ListView из БД - Программирование Android
Есть одна активити, в ней 2 текстовых поля и кнопка, отправляющая содержимое этих полей как строку в БД. Есть другая активити, которая...

Заполнение ListView в AsyncTask - Программирование Android
Нужно заполнить ListView картинками, которые скачиваются в AsyncTask с помощью Picasso. Картинки скачиваются нормально, ArrayList и...

Заполнение ListView из HashMap - Программирование Android
Добрый день. Столкнулся с некоторой проблемой при наполнении ListView с помощью HashMap. Проблема вот в чем, заполняю HashMap с помощью...

Неверно отображается заполнение прогрессбара в элементах ListView - Программирование Android
Добрый день. Мне нужно создать ListView, в элементах которого отображается ProgressBar нестандартного цвета. В методе getView моего списка...

ListView. После добавления кнопки перестал быть доступен сам ListView - Программирование Android
Кастомизировал ListView с помощью нескольких TextView. Но после того, как добавил ImageButton сам список стал недоступен для клика, а...

Listview вывод данных и переход по нажатию на другой Listview SQLite - Программирование Android
Доброго извините за название темы, долго не мог сформировать название, В общем у меня беда с пытаюсь написать программу где первый экран...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
vanchous
1 / 0 / 0
Регистрация: 06.11.2016
Сообщений: 22
06.11.2016, 02:12 #2
без кода нечего фиксить
0
shavuz
106 / 112 / 21
Регистрация: 29.01.2014
Сообщений: 554
06.11.2016, 11:21 #3
лучше бы конечно с кодом, в принципе возможен варриант что вы заполняете лист до передачи его в адаптер и когда возвращаетесь то он еще раз заполняется, такое может произойти в онРезюм например.
0
AlexRu18
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 101
06.11.2016, 21:05  [ТС] #4
Вот собственно код

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
public class SeDesc extends Fragment {
 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.cyl_desc, container, false);
 
        Bundle bundle = getArguments();
        Integer selectedProduct;
 
        if (bundle != null) {
            selectedProduct = bundle.getInt("productIndex");
            Toast toast = Toast.makeText(getContext(),
                    "Выбран продукт номер " + selectedProduct, Toast.LENGTH_SHORT);
            //toast.show();
 
             ...
 
            //Изображение серии
            TypedArray cySerPicsArr = getResources().obtainTypedArray(R.array.cySePics);
            ImageView img = (ImageView) view.findViewById(R.id.seLogo);
            img.setImageDrawable(cySerPicsArr.getDrawable(selectedProduct));
 
        }
 
        return view;
    }
 
}
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
public class CyFragment extends Fragment implements CyChoiseAdapter.OnProductSelected {
 
    ArrayList<Product> products = new ArrayList<Product>();
    CyChoiseAdapter boxAdapter;
    Fragment fragment = null;
    Class fragmentClass = null;
 
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.cy_fragment, container, false);
 
 
        // создаем адаптер
        fillData();
        boxAdapter = new CyChoiseAdapter(getContext(), products, this); //this - интерфейс
 
        // настраиваем список
        ListView lvMain = (ListView) view.findViewById(R.id.cyList);
        lvMain.setAdapter(boxAdapter);
        return view;
 
    }
 
    // генерируем данные для адаптера
    void fillData() {
        for (int i = 0; i <= 17; i++) {
            String[] cySerNamArr = getResources().getStringArray(R.array.cySerNam);
            String[] cySerSubNamArr = getResources().getStringArray(R.array.cySerSubNam);
            TypedArray cySerPicsArr = getResources().obtainTypedArray(R.array.cyPics);
 
            products.add(new Product(cySerNamArr[i], cySerSubNamArr[i],
                    cySerPicsArr.getDrawable(i), null));
 
        }
 
    }
 
    @Override
    public void onProductSelected(int productIndex) {
        //Product selectedProduct = products.get(productIndex);
 
        fragmentClass = SeDescr.class;
 
        try{
            fragment = (Fragment) fragmentClass.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
 
        SeDescr SerDesc = new SeDescr();
        Bundle bundle = new Bundle();
        bundle.putInt("productIndex", productIndex);
        SerDesc.setArguments(bundle);
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction().addToBackStack(null).replace(container, SerDesc).commit();
    }
 
}
0
Pablito
2494 / 1939 / 605
Регистрация: 12.05.2014
Сообщений: 6,798
Завершенные тесты: 1
06.11.2016, 21:14 #5
JSON
1
2
3
4
// создаем адаптер
products.clear();
        fillData();
        boxAdapter = new CyChoiseAdapter(getContext(), products, this); //this - интерфейс
1
AlexRu18
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 101
06.11.2016, 21:14  [ТС] #6
И ещё при обновлении ориентации экрана происходит сброс всего, как будто заново запустил приложение
0
kondusov
3 / 3 / 0
Регистрация: 01.06.2013
Сообщений: 153
07.11.2016, 12:36 #7
Это потому что при смене ориентации экрана нужно сохранять данные в методе onSaveInstanceState методами putExtra . и в onCreate дописать восстановление значений через getExtra, вроде так
0
AlexRu18
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 101
07.11.2016, 12:43  [ТС] #8
Я читал это. Но я даже не знаю что туда можно сохранить. Разве что выбранную позицию в NavDrawer или id фрагмента
0
shavuz
106 / 112 / 21
Регистрация: 29.01.2014
Сообщений: 554
08.11.2016, 07:55 #9
можно через манифест сделать чтоб не обновлялось при смене ориентации
в активити в манифесте : android:configChanges="orientation|screenSize
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2016, 07:55
Привет! Вот еще темы с ответами:

Данные из SQlite в ListView, обработка события ListView - Программирование Android
Ребят, есть БД, ListView. Надо при нажатии на строчку ListView вытащить данные int из БД. mList.setOnItemClickListener(new...

ListView, ToggleButton, SQLite, CursorAdapter. Как найти idItem в ListView, где была нажата ToggleButton? - Программирование Android
Добрый день. Затрудняюсь понять один момент: У меня есть ListView, который заполнен Items. Каждый Item - это свой XML. Пока...

Копирование данных из 1 listView во 2 listView - Программирование Android
Нужно что бы при нажатии на один элемент в первом ListView он копировался во второй ListView причём многократно.Но я использую...

Использование ListView в ListView - Программирование Android
Всем привет. Можете показать как использовать ListView в ListView, с заполнением как внешнего ListView, так и внутреннего причем с...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.11.2016, 07:55
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru