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

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

Войти
Регистрация
Восстановить пароль
 
DeadRayder
0 / 0 / 0
Регистрация: 28.11.2014
Сообщений: 25
#1

Передача данных между ListView - Программирование Android

14.08.2015, 17:21. Просмотров 462. Ответов 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 (Программирование Android):

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

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

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

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

Передача данных между потоками - Программирование Android
Всем доброго времени суток. В общем есть приложение, которое парсит сайт с музыкой, добавляет результат в listView и затем выводит...

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

10
Armagedo
208 / 208 / 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
208 / 208 / 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
2552 / 2034 / 634
Регистрация: 12.05.2014
Сообщений: 7,157
Завершенные тесты: 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
333 / 294 / 63
Регистрация: 17.10.2014
Сообщений: 870
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2015, 10:44
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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