5 / 5 / 3
Регистрация: 29.01.2015
Сообщений: 189
1

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

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

Есть 2 фрагмента, в первом лист заполняемый с помощью TypedArray. Когда я перехожу по позиции листа и возвращаюсь назад, то лист заполняется заново и получается вместо 20 позиций 40. Как можно пофиксить?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.11.2016, 01:10
Ответы с готовыми решениями:

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

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

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

Заполнение ListView данными из ArrayList
Привет! Помогите решить проблему. Есть класс в котором настроен ArrayList: public class Colors { ...

8
1 / 0 / 0
Регистрация: 06.11.2016
Сообщений: 22
06.11.2016, 02:12 2
без кода нечего фиксить
0
114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 609
06.11.2016, 11:21 3
лучше бы конечно с кодом, в принципе возможен варриант что вы заполняете лист до передачи его в адаптер и когда возвращаетесь то он еще раз заполняется, такое может произойти в онРезюм например.
0
5 / 5 / 3
Регистрация: 29.01.2015
Сообщений: 189
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
2882 / 2294 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
06.11.2016, 21:14 5
JSON
1
2
3
4
// создаем адаптер
products.clear();
        fillData();
        boxAdapter = new CyChoiseAdapter(getContext(), products, this); //this - интерфейс
1
5 / 5 / 3
Регистрация: 29.01.2015
Сообщений: 189
06.11.2016, 21:14  [ТС] 6
И ещё при обновлении ориентации экрана происходит сброс всего, как будто заново запустил приложение
0
4 / 4 / 0
Регистрация: 01.06.2013
Сообщений: 153
07.11.2016, 12:36 7
Это потому что при смене ориентации экрана нужно сохранять данные в методе onSaveInstanceState методами putExtra . и в onCreate дописать восстановление значений через getExtra, вроде так
0
5 / 5 / 3
Регистрация: 29.01.2015
Сообщений: 189
07.11.2016, 12:43  [ТС] 8
Я читал это. Но я даже не знаю что туда можно сохранить. Разве что выбранную позицию в NavDrawer или id фрагмента
0
114 / 120 / 26
Регистрация: 29.01.2014
Сообщений: 609
08.11.2016, 07:55 9
можно через манифест сделать чтоб не обновлялось при смене ориентации
в активити в манифесте : android:configChanges="orientation|screenSize
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.11.2016, 07:55
Помогаю со студенческими работами здесь

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

Заполнение ListView с XML
Здравствуйте, мне нужна помощь, не могу понять как заполнить ListView с XML файла скаченного с...

Некорректное заполнение DataGridView
На форме DataGridView, с содержимым таблицы из базы данных. Первый скрин - база данных(типы данных...

Некорректное заполнение ProgressBar
ProgressBar работает не синхронно с ходом выполнения процесса. В TMemo выводится результаты, всего...

Некорректное заполнение массива
Околосапёр. Не могу понять, почему не работает. Девятка - бомба. Почему-то не хочет окружать её...

Некорректное заполнение двумерного массива
Доброго дня форумчане! Столкнулся с такой проблемой - заполняю двумерный массив &quot;горизонтально&quot;...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru