Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
DeadRayder
0 / 0 / 0
Регистрация: 28.11.2014
Сообщений: 25
#1

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

14.08.2015, 17:21. Просмотров 492. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2015, 17:21
Ответы с готовыми решениями:

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

ListView: передача данных в item
Элементы ListView содержат три TextView и два ImageView. В первый TextView...

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

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

Передача данных между Активити
Все никак не могу разобраться, как передавать данные между активити? я до этого...

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

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

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

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

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

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

Не по теме:

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

0
18.08.2015, 10:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2015, 10:44
Привет! Вот еще темы с ответами:

Передача данных между активити
как сделать так чтобы при нажатии на кнопку в первом активити изменялись данные...

Передача данных между Activity1 3
1. надо сделать что бы из 1 окна передать данные на 3 окно 2. если честно я...

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


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

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

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