Урок 52. SimpleCursorAdapter, пример использования

Обсуждение уроков
Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение neoksi » 04 апр 2013, 21:48

(flag==1) ? "Да" : "Нет";

п.с. Пишу по памяти, может немного путаю синтаксис.

jBee
Сообщения: 41
Зарегистрирован: 03 апр 2013, 16:24

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение jBee » 04 апр 2013, 22:06

Olivka писал(а): ...
а можно создать свой адаптер, переопределить в нем метод bindView..
Кажется понял:

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

public class MyAdapter extends CursorAdapter {
	
	LayoutInflater inflater;
	MyAdapter(Context context, Cursor c) {
		super (context, c);
		inflater = LayoutInflater.from(context);
	}

	@Override
	public void bindView(View arg0, Context arg1, Cursor arg2) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public View newView(Context arg0, Cursor arg1, ViewGroup arg2) {
		// TODO Auto-generated method stub
		return null;
	}	
}
Только пока не разобрался, от какого класса наследоваться: CursorAdapter или SimpleCursorAdapter.

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

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 04 апр 2013, 23:15

говорите поняли, а ничего не написали..

и запросом (2й способ) тоже можно. В сиквеле есть case.
R.id.team

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

jBee
Сообщения: 41
Зарегистрирован: 03 апр 2013, 16:24

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение jBee » 05 апр 2013, 10:21

Не написал пока потому что создание custom адаптера тема для меня новая.
Попробовал синтаксис case в sqlite - действительно работает. Осталось выбрать что лучше - использовать свой select c case или создать свой адаптер.

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

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 05 апр 2013, 12:13

лучше case
R.id.team

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

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение rezak90 » 05 апр 2013, 16:54

без кастомных адаптеров никуда
R.id.team
Политика на форуме запрещена

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

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 05 апр 2013, 19:47

rezak90 писал(а):без кастомных адаптеров никуда
смотря какая задача. Есл инужно всего лишь написать Да-Нет - лучше CASE.
Вообще очень, очень, очень многое можно решить простым sql-запросом. Просто народ зачастую этого не знает...
R.id.team

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

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение rezak90 » 06 апр 2013, 04:27

Olivka писал(а):
rezak90 писал(а):без кастомных адаптеров никуда
смотря какая задача. Есл инужно всего лишь написать Да-Нет - лучше CASE.
Вообще очень, очень, очень многое можно решить простым sql-запросом. Просто народ зачастую этого не знает...
в каждом проекте свой дизайн и он соответственно кастомный и по этому всегда нужно использовать кастомные адаптеры
R.id.team
Политика на форуме запрещена

jBee
Сообщения: 41
Зарегистрирован: 03 апр 2013, 16:24

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение jBee » 14 апр 2013, 19:20

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

С другой стороны, без необходимости кастомный адаптер лучше не использовать, поскольку это дополнительные ресурсы на создание объектов в адаптере при поиске экранных view
(имеется ввиду конструкция вида obj1 = (ViewClass)findViewById(ViewId) )
(такие адаптеры создаются насколько я понимаю почти исключительно для модификации данных при выводе в элемент списка например или подскажите зачем еще их создавать?).

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение rezak90 » 14 апр 2013, 19:44

поскольку это дополнительные ресурсы на создание объектов
какие ещё дополнительные ресурсы? а нативный в себе никаких объектов не создаёт?
Кастомизацию лучше делать для лучшего контроля над приложением, когда пишется свой код то всегда легче найти где ошибка, десятки примеров могу привести где есть ошибки в тех местах где мы просто используем чужой/нативный код (например actionbarsherlock или holoeverywhere имеют не мало ошибок).
R.id.team
Политика на форуме запрещена

jBee
Сообщения: 41
Зарегистрирован: 03 апр 2013, 16:24

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение jBee » 18 апр 2013, 08:58

Вот пример использования адаптера для урока данной темы:

Создаем отдельный класс, наследующий CursorAdapter:

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

public class MyCursorAdapter extends CursorAdapter {

	public MyCursorAdapter(Context context, Cursor c) {
		super(context, c);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void bindView(View view, Context context, Cursor cursor) {
		TextView tv = (TextView) view.findViewById(R.id.tvText);
		ImageView im = (ImageView) view.findViewById(R.id.ivImg);
		tv.setText("MYADAPTER "
				+ cursor.getString(cursor.getColumnIndex(DB.COLUMN_TXT))); // R.drawable.ic_launcher
		im.setImageResource(R.drawable.ic_launcher);

	}

	@Override
	public View newView(Context context, Cursor cursor, ViewGroup parent) {
		LayoutInflater inflater = LayoutInflater.from(context);
		View v = inflater.inflate(R.layout.item, parent, false);
		bindView(v, context, cursor);
		return v;
	}

}

В классе МainActivity для использования адаптера делаем следующие изменения:

комментируем строки:

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

        scAdapter = new SimpleCursorAdapter(this, R.layout.item, cursor, from, to);
        lvData = (ListView)findViewById(R.id.lvData);
        lvData.setAdapter(scAdapter);
добавляем в раздел объявления полей класса:

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

	MyCursorAdapter mcAdapter;
и создаем адаптер:

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

        mcAdapter = new MyCursorAdapter(this, cursor);
        lvData = (ListView)findViewById(R.id.lvData);
        lvData.setAdapter(mcAdapter);

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение rezak90 » 18 апр 2013, 09:57

чего то не понял, это вопрос или просто так пост (выше).
R.id.team
Политика на форуме запрещена

Garr01
Сообщения: 4
Зарегистрирован: 26 мар 2013, 06:57

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Garr01 » 25 апр 2013, 11:25

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

public class ActivityTwo extends Activity {

	ListView lv = (ListView)findViewById(R.id.listView1);
	private SimpleCursorAdapter ListAdapter;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.two);

		String[] from = { MediaStore.MediaColumns.TITLE };
		int[] to = { android.R.id.text1 };

		CursorLoader cursorLoader = new CursorLoader(this,
				MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
				MediaStore.Audio.Media.TITLE);

		Cursor cursor = cursorLoader.loadInBackground();

		ListAdapter  = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cursor, from, to,
				CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);

		lv.setAdapter(ListAdapter);
		
	}
Такая проблема. В ListActivity могу вывести список аудио файлов, а вот в ListView что то не идёт. В чём проблема?

igrok-vip
Сообщения: 56
Зарегистрирован: 29 апр 2013, 11:53

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение igrok-vip » 07 май 2013, 10:52

Не знаю куда и написать сюда или в тему про фрагменты.
Вообщем есть ViewPager на котором через ListView выводятся списки. Данные берутся из БД. По вашему совету хотел использовать SimpleCursorAdapter, чтобы записи содержали ID и можно было легко изменять ListView во фрагменте. Но никак не могу побороть проблему что класс Fragment не знает половину нужных мне методов. Допустим в уроке про SimpleCursorAdapter есть строчка
startManagingCursor(cursor);
Так вот Fragment не знает что такое startManagingCursor.
Есть способ заставить работать startManagingCursor во фрагменте?

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

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 07 май 2013, 10:58

пишите во врагменте getActivity(), а потом методы активити.
Например так, getActivity().startManagingCursor(yourCursor);
R.id.team

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

igrok-vip
Сообщения: 56
Зарегистрирован: 29 апр 2013, 11:53

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение igrok-vip » 07 май 2013, 11:04

Блин, спасибо большое)

igrok-vip
Сообщения: 56
Зарегистрирован: 29 апр 2013, 11:53

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение igrok-vip » 12 май 2013, 10:07

Почему simpleCursorAdapter не работает с фрагментами во ViewPager? Вызов c.requery() приводит к исчезновению всего ListView либо просто не обновляет данные в ListView.
И сразу ещё вопрос: Как сделать возможность множественного или одинарного выбора в ListView с simpleCursorAdapter'ом? Если в адаптер передавать android.R.layout.simple_list_item_single_choice, то непонятно что передавать в int to[]. Если создать свой xml с радиобаттоном, то радиобаттоны не связаны в группу и выбираются одновременно.

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

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение Foenix » 12 май 2013, 20:12

да все работает, видимо ты где-то что-то неправильно делаешь, а без кодов, логов и т.д. никто ничего не подскажет..
R.id.team

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

igrok-vip
Сообщения: 56
Зарегистрирован: 29 апр 2013, 11:53

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение igrok-vip » 13 май 2013, 07:57

Я тоже сначала подумал, что что-то не то делаю. Потом проверил на обычном Activity всё отлично работает. У меня из фрагмента вызывается диалогфрагмент, в котором меняется база данных и после чего я вызываю c.requery(). Но ListView не обновляется. Только если пролистать на пару страниц, чтобы произошло событие onDestroyView, onCreatView, лист обновляется. Видимо что-то я упускаю, но не пойму что. Вот ссылка на проект: http://yadi.sk/d/T1-Xbp9O4m5gS

rhythmbox91
Сообщения: 6
Зарегистрирован: 15 май 2013, 17:22

Re: Урок 52. SimpleCursorAdapter, пример использования

Сообщение rhythmbox91 » 15 май 2013, 17:31

Скажите пожалуйста. Я пару месяцев занимаюсь андроидом, и делаю сейчас свой небольшой проект для портфолио. Делая его появилась большая загвоздка. Сначала расскажу смысл проекта. С помощью броадкаста перехватываются сообщения, смотрится номер, если номер, если требуемый то смотрится на формат сообщения, если да то сообщение сохраняется в БД, иначе отправляется на обычный приемник. В самом приложении выводится с помощью simpleCursorAdapter список всех этих смс. Смысл этого всего - сюрприз для моей девушки. Сделал к нему виджет, чтоб красиво всегда последняя запись выводилась на экране. Решил расширить его, и сделал функцию отправки из этого приложения сообщения дефолтно на мой номер, то есть только EditText и Button. Ввела отправила. Вот и подбираюсь к загвоздке. Отправляется смс, сохраняется в БД, и я хочу сделать с помощью AsyncTask чтобы список сразу обновлялся. AsyncTask написал, но вот как сделать чтобы обновлялся simpleCursorAdapter не знаю. Уже второй день ломаю голову. Интернет облазил, но не нашел ответа на свой вопрос. Подскажите пожалуйста как такое можно сделать.

Ответить