Урок 109. Android 3. Fragments. ListFragment - список

Обсуждение уроков
Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Урок 109. Android 3. Fragments. ListFragment - список

Сообщение KamiSempai » 05 ноя 2014, 16:21

sanSagittarius писал(а):Подскажите, плииз, как обратиться к полю.
По всей видимости вы не внимательно читали предыдущие уроки, либо вовсе их не читали. Например в уроке №19 четко и ясно показано ка обращаться элементам интерфейса, в частности к текстовым полям.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

iandryxa
Сообщения: 58
Зарегистрирован: 23 янв 2014, 20:40

Re: Урок 109. Android 3. Fragments. ListFragment - список

Сообщение iandryxa » 12 ноя 2014, 23:31

Всем привет, возникла такая проблема при объявлении адаптеру что список изменился (adapter.notifyDataSetChanged()) приложение вылетает со следующими ошибками:
11-12 19:30:28.616: E/AndroidRuntime(539): FATAL EXCEPTION: main
11-12 19:30:28.616: E/AndroidRuntime(539): java.lang.NullPointerException
11-12 19:30:28.616: E/AndroidRuntime(539): at com.exam2ple.line2.PostsList.addItem(PostsList.java:119)
11-12 19:30:28.616: E/AndroidRuntime(539): at com.exam2ple.line2.MainActivity$PostFragment$1.onClick(MainActivity.java:97)
11-12 19:30:28.616: E/AndroidRuntime(539): at android.view.View.performClick(View.java:3511)
11-12 19:30:28.616: E/AndroidRuntime(539): at android.view.View$PerformClick.run(View.java:14105)
11-12 19:30:28.616: E/AndroidRuntime(539): at android.os.Handler.handleCallback(Handler.java:605)
11-12 19:30:28.616: E/AndroidRuntime(539): at android.os.Handler.dispatchMessage(Handler.java:92)
11-12 19:30:28.616: E/AndroidRuntime(539): at android.os.Looper.loop(Looper.java:137)
11-12 19:30:28.616: E/AndroidRuntime(539): at android.app.ActivityThread.main(ActivityThread.java:4424)
11-12 19:30:28.616: E/AndroidRuntime(539): at java.lang.reflect.Method.invokeNative(Native Method)
11-12 19:30:28.616: E/AndroidRuntime(539): at java.lang.reflect.Method.invoke(Method.java:511)
11-12 19:30:28.616: E/AndroidRuntime(539): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
11-12 19:30:28.616: E/AndroidRuntime(539): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
11-12 19:30:28.616: E/AndroidRuntime(539): at dalvik.system.NativeStart.main(Native Method)
11-12 19:30:29.236: I/dalvikvm(539): threadid=3: reacting to signal 3
11-12 19:30:29.256: I/dalvikvm(539): Wrote stack traces to '/data/anr/traces.txt'
11-12 19:30:29.816: I/dalvikvm(539): threadid=3: reacting to signal 3
11-12 19:30:29.866: I/dalvikvm(539): Wrote stack traces to '/data/anr/traces.txt'
11-12 19:30:30.006: I/Process(539): Sending signal. PID: 539 SIG: 9

При этом метод добавления пункта списка вызывается из другого фрагмента.

Код: Выделить всё

public void addItem(){
		p = new Post();
		title = p.getTitle();
		date = p.getNow_date();
		data.add(0, p);
		Log.e(TAG, "пункт добавлен");
		adapter.notifyDataSetChanged();
	}
В чем может быть проблема?

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

Re: Урок 109. Android 3. Fragments. ListFragment - список

Сообщение doter.ua » 12 ноя 2014, 23:42

MainActivity.java:97
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

iandryxa
Сообщения: 58
Зарегистрирован: 23 янв 2014, 20:40

Re: Урок 109. Android 3. Fragments. ListFragment - список

Сообщение iandryxa » 13 ноя 2014, 00:02

вот именно эта строка и представляет собой вызов метода добавления и обновления адаптера

Код: Выделить всё

new PostsList().addItem();

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 109. Android 3. Fragments. ListFragment - список

Сообщение klblk » 13 ноя 2014, 05:40

PostsList.java:119

iandryxa
Сообщения: 58
Зарегистрирован: 23 янв 2014, 20:40

Re: Урок 109. Android 3. Fragments. ListFragment - список

Сообщение iandryxa » 13 ноя 2014, 07:01

Это строка обновления адаптера

Код: Выделить всё

adapter.notifyDataSetChanged();
В этом и состоит мой вопрос, почему при обновлении адаптера приложение вылетает?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 109. Android 3. Fragments. ListFragment - список

Сообщение klblk » 13 ноя 2014, 07:47

iandryxa писал(а):Это строка обновления адаптера

Код: Выделить всё

adapter.notifyDataSetChanged();
В этом и состоит мой вопрос, почему при обновлении адаптера приложение вылетает?
adapter == null, т.е. не определен.

iandryxa
Сообщения: 58
Зарегистрирован: 23 янв 2014, 20:40

Re: Урок 109. Android 3. Fragments. ListFragment - список

Сообщение iandryxa » 13 ноя 2014, 10:28

то есть как не определен, можно если не сложно по подробнее?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 109. Android 3. Fragments. ListFragment - список

Сообщение klblk » 13 ноя 2014, 10:51

строчка:
[syntax=java]adapter.notifyDataSetChanged();[/syntax]
выполняется до того как "появится" адаптер:
[syntax=java]adapter = new MyAdapter(); //класс адаптера может быть другой[/syntax]

iandryxa
Сообщения: 58
Зарегистрирован: 23 янв 2014, 20:40

Re: Урок 109. Android 3. Fragments. ListFragment - список

Сообщение iandryxa » 13 ноя 2014, 18:07

понял, спасибо за помощь)

sanSagittarius
Сообщения: 8
Зарегистрирован: 27 окт 2014, 11:35

Re: Урок 109. Android 3. Fragments. ListFragment - список

Сообщение sanSagittarius » 20 ноя 2014, 09:55

Ребята, помогите новичку, пожалуйста!

Решил углубиться в тему урока - чтобы можно было добавить данные в БД и потом отобразить в списке. Добавил класс DB.java и поля ввода текста. С этим проблем не возникло - данные успешно добавились в БД.

После чего считываю данные в курсор Curcor. По логам - операция тоже проходит успешно.

А вот отобразить эти данные из курсора никак не получается. Перерыл кучу сайтов, но везде примеры либо через строковый массив (задается прямо в коде), либо данные отображаются через SimpleCursorAdapter, тогда как в рамках текущего урока SimpleCursorAdapter является deprecated и программа вылетает с ошибкой "Unfortunately..."

При этом использую следующий код:

Код: Выделить всё

final SimpleCursorAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), android.R.layout.simple_list_item_1, cursor, from, to);
final ListView lv = (ListView) findViewById(R.id.fragment1);
lv.setAdapter(adapter);
Подскажите, пожалуйста, какой адаптер использовать и, если не сложно, пример того, как в данном случае правильно делать связку курсор-адаптер-фрагмент(ListFragment).

С уважением,
Александр

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 109. Android 3. Fragments. ListFragment - список

Сообщение Foenix » 20 ноя 2014, 10:16

не SimpleCursorAdapter deprecated, а его конструктор. Используй другой и будет тебе счастье
http://developer.android.com/reference/ ... sorAdapter(android.content.Context, int, android.database.Cursor, java.lang.String[], int[])
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

sanSagittarius
Сообщения: 8
Зарегистрирован: 27 окт 2014, 11:35

Re: Урок 109. Android 3. Fragments. ListFragment - список

Сообщение sanSagittarius » 20 ноя 2014, 17:03

Foenix писал(а):Используй другой и будет тебе счастье
Не выходит у меня каменная чаша! (((

Немного продвинулся, используя другой конструктор (теперь не ругается на SimpleCursorAdapter и программа аварийно не закрывается):

Код: Выделить всё

mAdapter = new SimpleCursorAdapter(getActivity(),
android.R.layout.simple_list_item_1, null,
new String[] { DB.COLUMN_TXT, DB.COLUMN_ID },
new int[] { R.layout.fragment}, 0);
setListAdapter(mAdapter);
Ошибок никаких не подсвечивает, но, блин, данные из БД на экран не попадают! ((( Где ошибка - теперь вообще непонятно...

Помогите, плиз...

sanSagittarius
Сообщения: 8
Зарегистрирован: 27 окт 2014, 11:35

Re: Урок 109. Android 3. Fragments. ListFragment - список

Сообщение sanSagittarius » 24 ноя 2014, 11:41

sanSagittarius писал(а): Помогите, плиз...
Неужели нет желающих помочь новичку?!? :(

finberg
Сообщения: 51
Зарегистрирован: 11 мар 2013, 14:20

Re: Урок 109. Android 3. Fragments. ListFragment - список

Сообщение finberg » 24 ноя 2014, 22:14

new int { R.layout.fragment} наверное не в тему. Сдесь нужно дать id TextView которые находятся в android.R.layout.simple_list_item_1.

А вообще создайте свой класс адаптера, наследующий SimpleCursorAdapter, свою разметку ячейки - сделайте красивую конфетку. Заодно разберетесь в адаптерах.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 109. Android 3. Fragments. ListFragment - список

Сообщение Foenix » 24 ноя 2014, 22:40

finberg писал(а):new int { R.layout.fragment} наверное не в тему. Сдесь нужно дать id TextView которые находятся в android.R.layout.simple_list_item_1.

А вообще создайте свой класс адаптера, наследующий SimpleCursorAdapter, свою разметку ячейки - сделайте красивую конфетку. Заодно разберетесь в адаптерах.
советую тебе прислушаться и написать свой адаптер. Там все намного понятней, чем кажется.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

sanSagittarius
Сообщения: 8
Зарегистрирован: 27 окт 2014, 11:35

Re: Урок 109. Android 3. Fragments. ListFragment - список

Сообщение sanSagittarius » 25 ноя 2014, 10:04

finberg писал(а): А вообще создайте свой класс адаптера, наследующий SimpleCursorAdapter, свою разметку ячейки - сделайте красивую конфетку. Заодно разберетесь в адаптерах.
Благодарю за наводку! Буду копать в этом направлении (кстати, от полезной ссылочки по этой теме тоже не отказался бы).

Хотя, признаться, жаль оставлять эту тему недоделанной - все, вроде, выглядело таким удобным для размещения списков. Логично было предположить, что ListFragment умеет красиво и с базами данных работать... Ан-нет... :(

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 109. Android 3. Fragments. ListFragment - список

Сообщение Foenix » 25 ноя 2014, 13:02

дальше уроки читай, там все про это есть.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

bigbaak
Сообщения: 5
Зарегистрирован: 27 апр 2014, 20:16
Откуда: Казахстан

Re: Урок 109. Android 3. Fragments. ListFragment - список

Сообщение bigbaak » 30 ноя 2014, 21:42

Здравствуйте уважаемый Админ и Модератор.
Я уже не знаю, как решить эту проблему и что делать дальше. Хочу создать ListView с скользящим заголовками.
То есть, при перемещение списка, наверху Заголовок списка тоже двигался и исчезал верх.
У меня в качестве заголовка Slider.
У меня есть другое решение, но оно не эффективное и не очень гибкое...
Изображение

XML

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/slidingView"
        android:layout_width="match_parent"
        android:layout_height="100dp" />

    <ListView
        android:id="@android:id/list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@android:id/empty"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="@dimen/text_size_normal"
        android:gravity="center"
        android:text="Нет подключение к интернету" />
</LinearLayout>
CODE:

Код: Выделить всё

package too.aibo.hpt.iKitap;

import android.app.Fragment;
import android.app.FragmentManager;
import android.app.ListFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;

import too.aibo.hpt.smallclass.SlidingDrawer;

/**
 * Created by Admin on 01.12.2014.
 */
public class withSlider extends ListFragment {
    String data[] = {"1", "2", "3", "4", "5", "6", "7", "8", "6", "7", "8", "6", "7", "8"};

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_expandable_list_item_1, data);
        setListAdapter(adapter);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.list_fragment_with_sliders, null);
        Fragment fragment = new SlidingDrawer();
        Bundle bundle1 = new Bundle();
        bundle1.putInt("OR", 1);
        fragment.setArguments(bundle1);
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction().replace(R.id.slidingView, fragment).commit();
        return view;
    }
}
p.s. Возможно ли, что внутри ListView элементы были из Fragment'ов?Пример, кода

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 109. Android 3. Fragments. ListFragment - список

Сообщение Foenix » 01 дек 2014, 07:49

не нужно ничего такого городить.
Просто делай заголовок - как обычную первую строчку списка. ЭТо можно сделать разными способами - определить два типа вьюшек для списка, например, или просто в зависимости от содержимого подменять компоненты строки. Но без кастомного адаптера тут не обойтись. Дочитай уроки до кастомного адаптера.
Все это нужно делать в getView()
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Ответить