фильтрация данных в ListView
фильтрация данных в ListView
Такое задание есть - с базы заполняется ListView (иконка, название, автор, цена). есть 3 кнопки - платные, бесплатные, все. как сделать чтобы при выборе конкретной кнопки отображались только те товары которые подходят по критериям. если можна, то дайте небольшой примерчик.
Re: фильтрация данных в ListView
у меня примера нету, но я бы делала примерно так
Когда вы "из базы" получаете запросом курсор, и на его основе строите список, то при нажатии кнопки - нужно пересоздавать тот же самый курсор, только запрос в базу будет другой по бесплатным позициям, и так далее.
По-другому вам список не отфильтровать.
Когда вы "из базы" получаете запросом курсор, и на его основе строите список, то при нажатии кнопки - нужно пересоздавать тот же самый курсор, только запрос в базу будет другой по бесплатным позициям, и так далее.
По-другому вам список не отфильтровать.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: фильтрация данных в ListView
Olivka, можно отфильтровать... http://developer.android.com/reference/ ... ilter.html
Класс Filter для этого спец и создан. Извините за примером в гугл так как тема не лёгкая и писать пример нужно не мало времени, а я только домой добрался =)
Класс Filter для этого спец и создан. Извините за примером в гугл так как тема не лёгкая и писать пример нужно не мало времени, а я только домой добрался =)
R.id.team
Политика на форуме запрещена
Политика на форуме запрещена
Re: фильтрация данных в ListView
я думаю многим бы было интересно посмотреть хоть небольшой примерчик реализации фильтра. спасибо.
Re: фильтрация данных в ListView
я сделала сама довольно быстро. Сайт stackoverflow.com просто полон примерами такого рода, можно сказать самостоятельно довольно редко приходится хоть что-то писать.gad007 писал(а):я думаю многим бы было интересно посмотреть хоть небольшой примерчик реализации фильтра. спасибо.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: фильтрация данных в ListView
да тема оказалась вовсе не такой уж сложной)rezak90 писал(а):Olivka, можно отфильтровать... http://developer.android.com/reference/ ... ilter.html
Класс Filter для этого спец и создан. Извините за примером в гугл так как тема не лёгкая и писать пример нужно не мало времени, а я только домой добрался =)
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: фильтрация данных в ListView
Помогите пожалуйста настроить фильтр. Никак не получается( У меня поиск осуществляется через spinner. Пользователь выбирает нужный параметр фильтрации и ListView обновляется.
Вот код:
Фильтровать надо по столбцу который в ListView не отображается, но есть в базе. Я так понимаю scAdapter.getFilter().filter("Текст условие") мне не поможет. Нужно менять запрос в курсоре? Только вот где не пойму.
Вот код:
Код: Выделить всё
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.modification);
// адаптер
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, data);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner = (Spinner) findViewById(R.id.spin_mod);
spinner.setAdapter(adapter);
spinner.setPrompt("Title");
spinner.setSelection(0);
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
//Сюда, я так понял, надо вставить, что то вроде: scAdapter.getFilter().filter("Текст условие");
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
// открываем подключение к БД
db = new DayzDB(this);
db.openDataBase();
// формируем столбцы сопоставления
String[] from = new String[] { DayzDB.COLUMN_MENU_NAME, DayzDB.COLUMN_MENU_IMG };
int[] to = new int[] { R.id.list_name, R.id.list_img };
// создааем адаптер и настраиваем список
scAdapter = new MySimpleCursorAdapter(this, R.layout.list, null, from, to, 0);
lvData = (ListView) findViewById(R.id.lvmod);
lvData.setAdapter(scAdapter);
// создаем лоадер для чтения данных
getSupportLoaderManager().initLoader(0, null, this);
}
protected void onDestroy() {
super.onDestroy();
db.close();
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle bndl) {
return new MyCursorLoader(this, db);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
scAdapter.swapCursor(cursor);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
}
static class MyCursorLoader extends CursorLoader {
DayzDB db;
public MyCursorLoader(Context context, DayzDB db) {
super(context);
this.db = db;
}
@Override
public Cursor loadInBackground() {
Cursor cursor = null;
cursor = db.getModData();
return cursor;
}
Re: фильтрация данных в ListView
Кому если надо сделал так:
Код: Выделить всё
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
pos = position;
getSupportLoaderManager().getLoader(0).forceLoad();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
Код: Выделить всё
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle bndl) {
return new MyCursorLoader(this, db, pos);
}
Код: Выделить всё
@Override
public void onLoaderReset(Loader<Cursor> loader) {
}
static class MyCursorLoader extends CursorLoader {
DayzDB db;
public MyCursorLoader(Context context, DayzDB db, int pos) {
super(context);
this.db = db;
}
@Override
public Cursor loadInBackground() {
Cursor cursor = null;
switch (pos){
case 0:
cursor = db.getAllData();
break;
case 1:
cursor = db.getModKrepData();
break;
}
return cursor;
}
Re: фильтрация данных в ListView
маааленькое пожелание
чтоб был читаемый код, можно оформить позиции вашего спиннера как константы со звучным именем
final int FILTER_ALL=0;
final int FILTER_GOOD=1;
и в зависимости от выбранной позиции назначать переменной pos (у вас pos) значение одно или другео. Далее в операторе switch уже перебирать не безликие 0 или 1, а именами констант
switch (pos){
case FILTER_ALL:
...
и еще, если это уместно, но я обычно оформляю такие методы как у вас getAllData и getModKrepData - если они к одному набору данных, конечно же (к одним и тем же таблицам) в один метод, только на вход посылаю значение фильтра. Таким образом можно даже этот switch опустить. Да и еще кое-где подсократить код, не теряя читаемости.
чтоб был читаемый код, можно оформить позиции вашего спиннера как константы со звучным именем
final int FILTER_ALL=0;
final int FILTER_GOOD=1;
и в зависимости от выбранной позиции назначать переменной pos (у вас pos) значение одно или другео. Далее в операторе switch уже перебирать не безликие 0 или 1, а именами констант
switch (pos){
case FILTER_ALL:
...
и еще, если это уместно, но я обычно оформляю такие методы как у вас getAllData и getModKrepData - если они к одному набору данных, конечно же (к одним и тем же таблицам) в один метод, только на вход посылаю значение фильтра. Таким образом можно даже этот switch опустить. Да и еще кое-где подсократить код, не теряя читаемости.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: фильтрация данных в ListView
Foenix спасибо за хорошие поправки, постараюсь их использовать. Я еще сам мало такие вещи замечаю, из за малого опыта.
Re: фильтрация данных в ListView
Сделал так
И метод выборки:
Код: Выделить всё
public class ModActivity extends FragmentActivity implements LoaderCallbacks<Cursor> {
ListView lvData;
DayzDB db;
SimpleCursorAdapter scAdapter;
String[] data = {"Все", "Категория1", "Категория2", "Категория3", "Категория4", "Категория5", "Категория6", "Категория7", "Категория8", "Категория9"};
Spinner spinner;
static String pos1 = "Раздел", pos2 = "";
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.modification);
// адаптер
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, data);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner = (Spinner) findViewById(R.id.spin_mod);
spinner.setAdapter(adapter);
// заголовок
spinner.setPrompt("Title");
// выделяем элемент
spinner.setSelection(0);
// устанавливаем обработчик нажатия
spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
// показываем позиция нажатого элемента
if (position == 0)
pos2 = "%";
else
pos2 = data[position];
getSupportLoaderManager().getLoader(0).forceLoad();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
// открываем подключение к БД
db = new DayzDB(this);
db.openDataBase();
// формируем столбцы сопоставления
String[] from = new String[] { DayzDB.COLUMN_MENU_NAME, DayzDB.COLUMN_MENU_IMG };
int[] to = new int[] { R.id.list_name, R.id.list_img };
// создааем адаптер и настраиваем список
scAdapter = new MySimpleCursorAdapter(this, R.layout.list, null, from, to, 0);
lvData = (ListView) findViewById(R.id.lvmod);
lvData.setAdapter(scAdapter);
// создаем лоадер для чтения данных
getSupportLoaderManager().initLoader(0, null, this);
}
protected void onDestroy() {
super.onDestroy();
// закрываем подключение при выходе
db.close();
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle bndl) {
return new MyCursorLoader(this, db, pos1, pos2);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
scAdapter.swapCursor(cursor);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
}
static class MyCursorLoader extends CursorLoader {
DayzDB db;
public MyCursorLoader(Context context, DayzDB db, String pos1, String pos2) {
super(context);
this.db = db;
}
@Override
public Cursor loadInBackground() {
Cursor cursor = db.getBaseData(pos1, pos2);
return cursor;
}
}
}
Код: Выделить всё
public Cursor getBaseData(String pos1, String pos2) {
String query = "SELECT * FROM " + DB_MENU_AP + " WHERE " + COLUMN_MENU_TYPE + " LIKE '" + pos1 + pos2 + "'";
return myDataBaseDZ.rawQuery(query, null);
}