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

Некорректное заполнение ListView - Android

Восстановить пароль Регистрация
 
AlexRu18
 Аватар для AlexRu18
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 90
06.11.2016, 01:10     Некорректное заполнение ListView #1
Есть 2 фрагмента, в первом лист заполняемый с помощью TypedArray. Когда я перехожу по позиции листа и возвращаюсь назад, то лист заполняется заново и получается вместо 20 позиций 40. Как можно пофиксить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vanchous
1 / 0 / 0
Регистрация: 06.11.2016
Сообщений: 22
06.11.2016, 02:12     Некорректное заполнение ListView #2
без кода нечего фиксить
shavuz
56 / 62 / 10
Регистрация: 29.01.2014
Сообщений: 299
06.11.2016, 11:21     Некорректное заполнение ListView #3
лучше бы конечно с кодом, в принципе возможен варриант что вы заполняете лист до передачи его в адаптер и когда возвращаетесь то он еще раз заполняется, такое может произойти в онРезюм например.
AlexRu18
 Аватар для AlexRu18
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 90
06.11.2016, 21:05  [ТС]     Некорректное заполнение ListView #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();
    }
 
}
Паблито
не спать!
1794 / 1528 / 475
Регистрация: 12.05.2014
Сообщений: 5,575
Завершенные тесты: 1
06.11.2016, 21:14     Некорректное заполнение ListView #5
JSON
1
2
3
4
// создаем адаптер
products.clear();
        fillData();
        boxAdapter = new CyChoiseAdapter(getContext(), products, this); //this - интерфейс
AlexRu18
 Аватар для AlexRu18
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 90
06.11.2016, 21:14  [ТС]     Некорректное заполнение ListView #6
И ещё при обновлении ориентации экрана происходит сброс всего, как будто заново запустил приложение
kondusov
2 / 2 / 0
Регистрация: 01.06.2013
Сообщений: 152
07.11.2016, 12:36     Некорректное заполнение ListView #7
Это потому что при смене ориентации экрана нужно сохранять данные в методе onSaveInstanceState методами putExtra . и в onCreate дописать восстановление значений через getExtra, вроде так
AlexRu18
 Аватар для AlexRu18
2 / 2 / 0
Регистрация: 29.01.2015
Сообщений: 90
07.11.2016, 12:43  [ТС]     Некорректное заполнение ListView #8
Я читал это. Но я даже не знаю что туда можно сохранить. Разве что выбранную позицию в NavDrawer или id фрагмента
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2016, 07:55     Некорректное заполнение ListView
Еще ссылки по теме:

Заполнение ListView в AsyncTask Android
Некорректное отображение содержания Android
Данные из SQlite в ListView, обработка события ListView Android

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

Или воспользуйтесь поиском по форуму:
shavuz
56 / 62 / 10
Регистрация: 29.01.2014
Сообщений: 299
08.11.2016, 07:55     Некорректное заполнение ListView #9
можно через манифест сделать чтоб не обновлялось при смене ориентации
в активити в манифесте : android:configChanges="orientation|screenSize
Yandex
Объявления
08.11.2016, 07:55     Некорректное заполнение ListView
Ответ Создать тему
Опции темы

Текущее время: 11:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru