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

Передача данных между ListView

14.08.2015, 17:21. Показов 1503. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток форумчане! Не получается решить одну проблему, надеюсь на вашу помощь. В классе фрагмента есть метод onCreateView, который создает мне 3 разных представления в зависимости от выбранной страницы. В первом представлении есть ListView, в который подгружаются данные, мне нужно выбранный элемент из этого списка передать в другое view этого же фрагмента и отобразить. Выводит ошибку NPE, то есть как я почитал где-то возвращается null. Из тех методов которые я вызывал это возможно в mAda.notifyDataSetChanged();, об этом тоже статейка попадалась. Эту проблему я решил тем, что инициализацию адаптера я перенес в первое view, так данные добавляются в коллекцию, но в listView ничего не отображается. Как мне исправить это?

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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
 
        View view;
 
        if (pageNumber == 0) {
 
            view = inflater.inflate(R.layout.fragment_products, null);
 
            productCollection = new ArrayList<>();
 
            final ImageView mImg = (ImageView) view.findViewById(R.id.products_img);
            mAdap = new ArrayAdapterItem(getActivity(),productCollection);
            mAdap.setNotifyOnChange(true);
            mList = (ListView) view.findViewById(R.id.list_products);
            mList.setAdapter(mAdap);
 
            final String TAG = "myTag";
 
            mAutoCompleteSearchProduct = (DelayAutoCompleteTextView) view.findViewById(R.id.search_product_autoCompl);
            mAutoCompleteSearchProduct.setThreshold(3);
            mAutoCompleteSearchProduct.setAdapter(new AutoCompleteArrayAdapter(getActivity()));
            mAutoCompleteSearchProduct.setLoadingIndicator((ProgressBar) view.findViewById(R.id.progressBar_fragment));
         
            mAutoCompleteSearchProduct.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
 
                    mImg.setVisibility(view.GONE);
 
                    Products myNewProd = (Products) parent.getItemAtPosition(position);
                    mProduct = myNewProd.productName;
 
                    ResultSet resultSet1;
 
                    Statement statement = null;
                    try {
                        statement = MainActivity.connect.createStatement();
                        resultSet1 = statement.executeQuery("select distinct Barcode_value\n" +
                                "from EXPORT_TABLE\n" +
                                "where Product_name = '" + mProduct + "'");
                        while (resultSet1.next())
                        {
                            mBarCodeProduct = resultSet1.getString("Barcode_value");
                        }
 
                        resultSet1.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
 
                    productCollection.clear();
 
                    ResultSet resultSetProd;
                    try {
                        resultSetProd = statement.executeQuery("select Product_name, Price, shop_name, Barcode_value, address\n" +
                                "from EXPORT_TABLE\n" +
                                "where Barcode_value = '" +mBarCodeProduct + "' AND City_name = '"+ SelectCityScreen.mCity +"' AND Quantity = 1");
 
                        while (resultSetProd.next()) {
                            productCollection.add(new PorductItem(resultSetProd.getString("Product_name"),
                                    resultSetProd.getString("Price"),
                                    resultSetProd.getString("shop_name"),
                                    resultSetProd.getString("Barcode_value"),
                                    resultSetProd.getString("address")));
                        }
 
                        Log.i(TAG, "Данные по поиску: " + productCollection);
 
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            });
 
            
            mList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
                @Override
                public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                    PorductItem mPorductItem = (PorductItem) parent.getItemAtPosition(position);
                    basketCollection.add(new PorductItem(mPorductItem.itemName,mPorductItem.price,mPorductItem.networkName,mPorductItem.barCode,mPorductItem.networkAddress));
 
                    Log.i(TAG, "Данные в корзине: " + basketCollection);
                    mAda.notifyDataSetChanged();
                    countProductInBasket++;
                    ((TextView)getActivity().findViewById(R.id.txt_column_product_in_basket)).setText(""+ countProductInBasket);
                    Toast.makeText(getActivity(),"Товар " + position + "был добавлен в корзину", Toast.LENGTH_LONG).show();
                    return false;
 
                }
 
            });
            return  view;
        }
        else if(pageNumber == 1)
        {
            final String TAG = "Log";
            view = inflater.inflate(R.layout.fragment_basket,null);
 
            Log.i(TAG, "Коллекция инициализирована");
 
            mAda = new ArrayAdapterItem(getActivity(),basketCollection);
            mAda.setNotifyOnChange(true);
 
            basketCollection.add(new PorductItem("fdsaf", "fdaf", "fdasf", "fdasfasd", "fasdfas"));
            mAda.notifyDataSetChanged();
 
            basketList = (ListView) view.findViewById(R.id.list_view_basket);
            basketList.setAdapter(mAda);
 
            basketList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
                @Override
                public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
 
                    PorductItem mProduct = (PorductItem) parent.getItemAtPosition(position);
                    mAda.remove(mProduct);
 
                    countProductInBasket--;
                    ((TextView)getActivity().findViewById(R.id.txt_column_product_in_basket)).setText(""+ countProductInBasket);
 
                    return false;
 
                }
 
            });
 
            return  view;
        }
        else
        {
            view = inflater.inflate(R.layout.fragment_sale,null);
            Typeface mType = Typeface.createFromAsset(getActivity().getAssets(),"fonts/GothamBook.ttf");
            TextView mTextViewSale = (TextView) view.findViewById(R.id.txt_sale);
            mTextViewSale.setTypeface(mType);
            mTextViewSale.setText("dfsaf: " + mBarCodeProduct);
            return  view;
 
        }
 
    }
Лог ошибки
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
08-14 14:08:05.029    8854-8854/com.example.deadrayder_1.shopperguidev20 W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x409bf1f8)
08-14 14:08:05.049    8854-8854/com.example.deadrayder_1.shopperguidev20 E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NullPointerException
            at com.example.deadrayder_1.shopperguidev20.HomeScreenFragment.onItemLongClick(HomeScreenFragment.java:249)
            at android.widget.AbsListView.performLongPress(AbsListView.java:2580)
            at android.widget.AbsListView$CheckForLongPress.run(AbsListView.java:2530)
            at android.os.Handler.handleCallback(Handler.java:605)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4424)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
            at dalvik.system.NativeStart.main(Native Method)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.08.2015, 17:21
Ответы с готовыми решениями:

Передача данных из ListView в другой Activity в ListView
Добрый день. Пытаюсь разобраться с передачей данных с ListView, но выходит что то непонятное, скриншоты приложения приложил. После...

Обратная передача данных в ListView
Почему-то в ListView не работает привязка данных: входные данные отображаются правильно, а вот то, что выбрал пользователь не фиксируется в...

ListView: передача данных в item
Элементы ListView содержат три TextView и два ImageView. В первый TextView записываю данные так: ArrayAdapter&lt;String&gt; adapter...

10
210 / 210 / 60
Регистрация: 22.08.2014
Сообщений: 644
14.08.2015, 18:05
Не вникая в код - что в HomeScreenFragment.java:249?
0
0 / 0 / 0
Регистрация: 28.11.2014
Сообщений: 25
14.08.2015, 18:12  [ТС]
вот это mAda.notifyDataSetChanged();

Добавлено через 1 минуту
я попадал на статью, где были описаны методы, которые могут вернуть Null, вот как я понимаю это и произошло с данным методом, он входил в ту группу)
0
210 / 210 / 60
Регистрация: 22.08.2014
Сообщений: 644
14.08.2015, 18:16
Цитата Сообщение от DeadRayder Посмотреть сообщение
вот это mAda.notifyDataSetChanged();
Ни в одном методе onItemLongClick в вашем куске кода нет mAda.notifyDataSetChanged()

Так что повторяю свой вопрос,

Цитата Сообщение от Armagedo Посмотреть сообщение
что в HomeScreenFragment.java:249?
0
0 / 0 / 0
Регистрация: 28.11.2014
Сообщений: 25
14.08.2015, 18:22  [ТС]
В logcat нажимаю на HomeScreenFragment.java:249 и меня перекидывает на строку в коде mAda.notifyDataSetChanged();

Добавлено через 1 минуту
есть в методе для mList вот тут:
Log.i(TAG, "Данные в корзине: " + basketCollection);
mAda.notifyDataSetChanged();
0
2884 / 2296 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
14.08.2015, 18:30
а где строка инициализации mAda ?
0
0 / 0 / 0
Регистрация: 28.11.2014
Сообщений: 25
14.08.2015, 19:27  [ТС]
Она находится во втором View. Если viewpager = 1, то есть вторая страница, то инициализируется
Java
1
2
mAda = new ArrayAdapterItem(getActivity(),basketCollection);
mAda.setNotifyOnChange(true);
Добавлено через 54 минуты
Для того чтобы решить проблему NullPointerException, достаточно инициализацию адаптера поместить в первое view, но тогда при добавлении объекта в коллекцию Listview не обновляется, хотя Log показывает, что новый элемент добавился в коллекцию
0
0 / 0 / 0
Регистрация: 28.11.2014
Сообщений: 25
17.08.2015, 17:32  [ТС]
Получается совсем никаких предположений нет?)
0
400 / 343 / 85
Регистрация: 17.10.2014
Сообщений: 1,015
17.08.2015, 17:43
Цитата Сообщение от DeadRayder Посмотреть сообщение
тогда при добавлении объекта в коллекцию Listview не обновляется, хотя Log показывает, что новый элемент добавился в коллекцию
ну так добавить эт половина дела, после же надо notifyDataSetChanged() вызвать
0
0 / 0 / 0
Регистрация: 28.11.2014
Сообщений: 25
18.08.2015, 10:36  [ТС]
Вызываю этот метод всегда после добавления) Может я уже просто какой-то мелочи не замечаю...Я для теста сделал во viewpager = 1 так, инициализировал адаптер, установил setNotifyOnChange(true), определил ListView, затем добавил в коллекцию произвольный объект и вызвал notifyDataSetChanged(), передал адаптер ListView. Дальше на клик по этому элементу должен добавляться этот же объект, это все замечательно отрабатывает. Как только я переношу код по добавлению элемента и обновление адаптера в часть кода где viewpager = 0, перестает отрисовывать данные по новой.

Добавлено через 24 минуты
хм...решил проблему вот так
Java
1
((ListView)getActivity().findViewById(R.id.list_view_basket)).setAdapter(mAda);
после клика по элементу каждый раз по новой передаю адаптер, это вообще легально?))
0
18.08.2015, 10:44

Не по теме:

При движении на авто у меня постоянно отваливается колесо.
Проблему решаю просто - каждый раз, как колесо отвалилось я достаю новое колесо и ставлю вместо отвалившегося.
Я молодец?

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.08.2015, 10:44
Помогаю со студенческими работами здесь

Передача данных между устройствами
Всем привет! Подскажите, пожалуйста, как передать значение переменной на другое устройство. Думал использовать wifi direct. Но как это...

Передача данных между Activity
Доброго времени суток, господа. Такой вопрос: с точки зрения ООП програмирования и программирования в целом, каким образом практичнее...

Передача данных между активностями
к примеру есть 2 активности первая public class first_act extends Activity { @Override protected void onCreate(Bundle...

Передача данных между activity
Здравствуйте! Для передачи данных между Activity требуется Пользователь вводит данные в строку(текст)-где этот param...

Передача данных между классами
Добрый день господа. Пишу свое первое приложение на андроид, и столкнулся с вот такой проблемой. Чего я ожидаю от приложения. В...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через 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