Listview, simplecursoradapter и button.

Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
mechanikos
Сообщения: 33
Зарегистрирован: 30 сен 2013, 12:14

Re: Listview, simplecursoradapter и button.

Сообщение mechanikos » 08 фев 2014, 23:01

rezak90 писал(а):
mechanikos писал(а):
rezak90 писал(а):держать ссылку на ctx вообще не нужно, в bindView приходит Context, вот его и используй
я это сразу сделал только немного на обророт "public void bindView(View view, Context ctx, Cursor cursor)", но увы. не могу понять в чем проблема. надо где то в классе контекст инициализовать?
Это уже от незнания ООП, в обработчике OnClickListener уже другая область видимости, и соответственно компилятор просит объект класса Context который ссылается за пределы этого интерфейса сделать final.
P.S. По "красивому" OnClickListener нужно вынести в активити/фрагмент, там есть ссылка на контекст.
спасибо,вы подтвердили мою догадку, и я вышел пусть и кривым способом. я конечно не гуру, но не настолько плохо знаю ООП)
другой вот вопрос по удалению. я читал, что вешать кучу кода в биндВью не есть хорошо и как выйти из этой ситуации?
в случае с контекстынм меню было все просто: в обработчике вызвал функцию удаления, обновил лоадер и все чудесно, а тут только говнокод один на ум приходит. от балды попробывал сделать все в обработчике адаптера рядом с выдачей тоста

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

dbForm form=new dbForm(context);
                    String st=obj.toString();
                    form.deleteForm(Long.valueOf(st).longValue());
и закономерно словил нульпоинтер. ума не приложу, обработчик во вьюбинде все дико усложняет)

mechanikos
Сообщения: 33
Зарегистрирован: 30 сен 2013, 12:14

Re: Listview, simplecursoradapter и button.

Сообщение mechanikos » 08 фев 2014, 23:21

хах,черт с ним с говнокодом, прямо в обработчике все и удалил и работает. одна проблема, как после этого заставить обновиться адаптеру(или перезагрузить лоадер)?

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

Re: Listview, simplecursoradapter и button.

Сообщение rezak90 » 08 фев 2014, 23:25

mechanikos писал(а):хах,черт с ним с говнокодом, прямо в обработчике все и удалил и работает. одна проблема, как после этого заставить обновиться адаптеру(или перезагрузить лоадер)?
по красивому нужно юзать ContentProvider, он сам всё обновит
R.id.team
Политика на форуме запрещена

mechanikos
Сообщения: 33
Зарегистрирован: 30 сен 2013, 12:14

Re: Listview, simplecursoradapter и button.

Сообщение mechanikos » 08 фев 2014, 23:44

rezak90 писал(а):
mechanikos писал(а):хах,черт с ним с говнокодом, прямо в обработчике все и удалил и работает. одна проблема, как после этого заставить обновиться адаптеру(или перезагрузить лоадер)?
по красивому нужно юзать ContentProvider, он сам всё обновит
знаю, но писать свой контент провайдер честно говоря вряд ли осилю. Архитектура и так разрастается а если буду юзать все фичи языка и делать максимум красивостей то этот проект займет вечность). поэтому а какие некрасивые способы есть? даже на костыли согласен,главное чтоб понятно было)

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

Re: Listview, simplecursoradapter и button.

Сообщение rezak90 » 09 фев 2014, 00:00

точно не помню, но попробуй getSupportLoaderManager().onForceLoad();
R.id.team
Политика на форуме запрещена

mechanikos
Сообщения: 33
Зарегистрирован: 30 сен 2013, 12:14

Re: Listview, simplecursoradapter и button.

Сообщение mechanikos » 09 фев 2014, 09:03

rezak90 писал(а):точно не помню, но попробуй getSupportLoaderManager().onForceLoad();
ну я раньше так и делал,говорю же. не могу понять как его вызывать теперь. прямо в обработчике кнопки что ли в биндВью?

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

Re: Listview, simplecursoradapter и button.

Сообщение rezak90 » 09 фев 2014, 11:09

mechanikos писал(а):
rezak90 писал(а):точно не помню, но попробуй getSupportLoaderManager().onForceLoad();
ну я раньше так и делал,говорю же. не могу понять как его вызывать теперь. прямо в обработчике кнопки что ли в биндВью?
я уже говорил, выноси обработчик в активити/фрагмент
R.id.team
Политика на форуме запрещена

mechanikos
Сообщения: 33
Зарегистрирован: 30 сен 2013, 12:14

Re: Listview, simplecursoradapter и button.

Сообщение mechanikos » 09 фев 2014, 17:28

rezak90 писал(а):
mechanikos писал(а):
rezak90 писал(а):точно не помню, но попробуй getSupportLoaderManager().onForceLoad();
ну я раньше так и делал,говорю же. не могу понять как его вызывать теперь. прямо в обработчике кнопки что ли в биндВью?
я уже говорил, выноси обработчик в активити/фрагмент
хм, не совсем понимаю,не сталкивался с таким. и выносить в какой то новый активити или в мой существующий main?и выносить только обработчик или в этот активити еще и листвью? не могу понять логику действий,зачем это и как оно поможет? можно какой либо пример?

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

Re: Listview, simplecursoradapter и button.

Сообщение rezak90 » 09 фев 2014, 19:21

Выносить в текущую активити только обработчик. Это поможет тем что обработчик будет в активити где есть доступ к LoadManager
R.id.team
Политика на форуме запрещена

Аватара пользователя
mdzht
Сообщения: 124
Зарегистрирован: 11 ноя 2013, 11:33
Откуда: fock it
Контактная информация:

Re: Listview, simplecursoradapter и button.

Сообщение mdzht » 11 фев 2014, 10:27

altwin писал(а): только REST API я даже не представляю, как это сделать иначе. Вы просто открываете диалог предлагая пользователю ввести текст комментария и отправляете его серверу, получаете новый ответ и обновляете комментарии в приложении. Здесь никаких особенных библиотек не нужно(только если конкретный web ресурс свою готовую имеет по типу facebook), любой REST клиент, просто после отправки отображаете индикатор загрузки, пока не придет обновленный ответ сервера.
Звучит ОООчень не плохо, по подробнее можете рассказать? Хочу сравнить с тем как я делаю. я взял готовый API у одного бандюгана И вонзил его прямо в сердце AsyncTask-а как обычный JR проггер с соплями. Пока не дышит ))
altwin писал(а): Можно конечно добавить комментарий в приложении при отсутствии соединения. а потом синхронизировать, но это бред, а вдруг его сервер не примет, а в каком порядке оно будет и т.д. это все нарушает предсказуемость поведения приложения, вся логика должна быть на сервере.
Это уже разговор с SQLite кажется. пока Табулистан
«Life is too short to spend rewriting code»

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Listview, simplecursoradapter и button.

Сообщение altwin » 11 фев 2014, 11:38

mdzht писал(а):
altwin писал(а): только REST API я даже не представляю, как это сделать иначе. Вы просто открываете диалог предлагая пользователю ввести текст комментария и отправляете его серверу, получаете новый ответ и обновляете комментарии в приложении. Здесь никаких особенных библиотек не нужно(только если конкретный web ресурс свою готовую имеет по типу facebook), любой REST клиент, просто после отправки отображаете индикатор загрузки, пока не придет обновленный ответ сервера.
Звучит ОООчень не плохо, по подробнее можете рассказать? Хочу сравнить с тем как я делаю. я взял готовый API у одного бандюгана И вонзил его прямо в сердце AsyncTask-а как обычный JR проггер с соплями. Пока не дышит ))
altwin писал(а): Можно конечно добавить комментарий в приложении при отсутствии соединения. а потом синхронизировать, но это бред, а вдруг его сервер не примет, а в каком порядке оно будет и т.д. это все нарушает предсказуемость поведения приложения, вся логика должна быть на сервере.
Это уже разговор с SQLite кажется. пока Табулистан
можно посмотреть, как подобное организованно тут: https://github.com/box/box-android-sdk/ ... rarySample Ну а вообще можно воспользоваться главным недостатком любой java программы, просто найти то приложение функционал которого вам нравится и скопировать код: http://developer.alexanderklimov.ru/and ... atitis.php (Декомпиляция очень простая.. это же java, просто 1 консольная команда и у вас есть весь код :))
Изображение

Аватара пользователя
mdzht
Сообщения: 124
Зарегистрирован: 11 ноя 2013, 11:33
Откуда: fock it
Контактная информация:

Re: Listview, simplecursoradapter и button.

Сообщение mdzht » 11 фев 2014, 11:43

altwin писал(а): можно посмотреть, как подобное организованно тут: https://github.com/box/box-android-sdk/ ... rarySample
The BIGGEST Благодарность, что и требовалось.
«Life is too short to spend rewriting code»

Аватара пользователя
mdzht
Сообщения: 124
Зарегистрирован: 11 ноя 2013, 11:33
Откуда: fock it
Контактная информация:

Re: Listview, simplecursoradapter и button.

Сообщение mdzht » 13 фев 2014, 11:31

altwin писал(а):Ну а вообще можно воспользоваться главным недостатком любой java программы, просто найти то приложение функционал которого вам нравится и скопировать код: http://developer.alexanderklimov.ru/and ... atitis.php (Декомпиляция очень простая.. это же java, просто 1 консольная команда и у вас есть весь код :))
:lol: :lol: :lol:
«Life is too short to spend rewriting code»

Zeban
Сообщения: 26
Зарегистрирован: 30 окт 2013, 06:46
Откуда: Благовещенск

Re: Listview, simplecursoradapter и button.

Сообщение Zeban » 17 фев 2014, 18:41

На этом же застрял. Не могу перезагрузить лодер. Попробовал вынести обработчик в активити, приходиться его делать static. А когда его делаешь статическим, перестает работать getSupportLoaderManager().initLoader(0, null, this);
Подскажите, что я не так делаю?

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

Re: Listview, simplecursoradapter и button.

Сообщение Foenix » 17 фев 2014, 19:38

что значит перезагрузить лодер?
задавай вопросы понятно.
R.id.team

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

Zeban
Сообщения: 26
Зарегистрирован: 30 окт 2013, 06:46
Откуда: Благовещенск

Re: Listview, simplecursoradapter и button.

Сообщение Zeban » 18 фев 2014, 03:58

У меня есть ListView, к каждому элементу привязана кнопка удаления. Так вот при ее нажатии элемент из базы удаляется, но на экране естественно все вьюшки остаются. Так как нужно перезагружать лодер. Я обновляю его с помощью getSupportLoaderManager().initLoader(0, null, this); Но в кастомном адапторе так не обновишь.
Вот код

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

class BasketSimpleCursorAdapter extends SimpleCursorAdapter { 
    Context ctx; 
    DataBaseHelper db;
    
    
    public BasketSimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) { 
        super(context, layout, c, from, to, flags); 
        this.ctx=context; 

    } 


    @Override 
    public void bindView(View view, Context context, Cursor cursor) { 
    	
    	
        String name =     cursor.getString(cursor.getColumnIndex(DataBaseHelper.COLUMN_TRASH_NAME)); 
        String kol = cursor.getString(cursor.getColumnIndex(DataBaseHelper.COLUMN_TRASH_KOL)); 
        String sell = cursor.getString(cursor.getColumnIndex(DataBaseHelper.COLUMN_TRASH_SELL)); 
        TextView formname = (TextView) view.findViewById(R.id.tvBasketName); 
        TextView formkol=(TextView) view.findViewById(R.id.tvBasketKol); 
        TextView formsell=(TextView) view.findViewById(R.id.tvBasketSell); 
        formname.setText(name); 
        formkol.setText(kol + " шт"); 
        formsell.setText(sell + " р"); 
        Button yourButton = (Button) view.findViewById(R.id.btnBasketDel); 
        yourButton.setOnClickListener( new View.OnClickListener() {
        	@Override
            public void onClick(View view) {
            if(view != null) {
                Object obj = view.getTag();
                if(obj != null && obj instanceof Integer) {
                    db = new DataBaseHelper(null);
                    db.openDataBase();
                     Toast.makeText(ctx,"удалено", Toast.LENGTH_SHORT).show();
                     db.delRec(((Integer)obj).intValue());
                     
                     }
                }
            }
        	});
        
        Object obj = cursor.getInt(cursor.getColumnIndex("_id"));
        yourButton.setTag(obj);
    } 
    
} 

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

Re: Listview, simplecursoradapter и button.

Сообщение Foenix » 18 фев 2014, 06:54

никакого "обновления" лоадеру не требуется, если правильно реализован контент-провайдер. И уж тем более в адаптере.
R.id.team

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

Ответить