Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
disx
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 582
Записей в блоге: 1
#1

ListView+onCreateContextMenu->AlertDialog

20.01.2015, 13:33. Просмотров 683. Ответов 11
Метки нет (Все метки)

Задача такая: по долгому нажатию на item в ListView вылетает контекстное меню где выбираем "Изменить", Далее появляется Alert Dialog в строку которого должно вставляться значение(наименование) item из базы SQLite?

Ниже код, помидорами не забрасывайте до чего додумался то и "накрапал":

В файле OneActivity:
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
// Стандартный List...
        scAdapter = new SimpleCursorAdapter(this, R.layout.item, cursor, from, to);
        lvData = (ListView) findViewById(R.id.listView1);
        lvData.setAdapter(scAdapter);
 
//в этом же файле:
 
public void onCreateContextMenu(ContextMenu menu, View v,
              ContextMenuInfo menuInfo) {
            super.onCreateContextMenu(menu, v, menuInfo);
            menu.add(0, CM_EDIT_ID, 0, R.string.edit_record);
            menu.add(0, CM_DELETE_ID, 0, R.string.delete_record);
          }
    
          public boolean onContextItemSelected(MenuItem item) {
                  
              if (item.getItemId() == CM_EDIT_ID) {
                    
                   showDialog(IDD_EDIT);
        
                    }
//и здесь же диалог...
 
 protected Dialog onCreateDialog(int id) {
            switch (id) {
            case IDD_EDIT:
                LayoutInflater inflater = LayoutInflater.from(this);
                View root = inflater.inflate(R.layout.dial, null);
                final EditText textName = (EditText)root.findViewById(R.id.name);
              final int itemid = this.[B]getSelectedItemId();[/B]//подчеркивает и пишет-"The method getSelectedItemId() is undefined for the type OneActivity"
               
             cursor.moveToPosition(itemid);
                 textName.setText(cursor.getString(2));
            
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setView(root);
                builder.setTitle(R.string.title_edit);
                builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                       //OneActivity.this.finish();
                                            
                    }
    
                });
                builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {
                        dialog.cancel();
                        }
                });
                builder.setCancelable(true);
                return builder.create();
            default:
            return null;
            }
Помогите пожалуйста собрать мысли воедино, Спасибо!

P.S. если как эклипс предлагает создать метод getSelectedItemId() то все работает, но в строчку алерта забивает значение из первого item (и неважно кликнув на каком я вызвал контекстное меню).
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2015, 13:33
Ответы с готовыми решениями:

ListView+onCreateContextMenu->AlertDialog->dbSQLite
Прошу помощи, т.к. вроде все складно, но не работает, вероятно проблема в...

Добавление и редактирование ListView через AlertDialog
Создаю элементы listview через alertdialog. Хочу по нажатию на элемент,...

AlertDialog
ЗДравствуйте! Имеется простая игра. Когда ХП игрока == 0, я останавливаю...

Custom AlertDialog
Помогите люди добрые, что то никак не нагуглю... А желательно кодом;)

AlertDialog и RadioGroup
Всем привет. Создаю программу, в которой в открывшемся диалоговом окне...

11
Armagedo
209 / 209 / 60
Регистрация: 22.08.2014
Сообщений: 644
20.01.2015, 14:28 #2
Java
1
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo()
+
http://developer.android.com/referen...tMenuInfo.html

и вперед
0
disx
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 582
Записей в блоге: 1
20.01.2015, 15:09  [ТС] #3
Armagedo, таки не вопрос, id я получаю(acmi.id), а что с ним дальше делать, куда его вкинуть?
0
Armagedo
209 / 209 / 60
Регистрация: 22.08.2014
Сообщений: 644
20.01.2015, 15:26 #4
Я где-то сказал про id?

Java
1
cursor.moveToPosition(info.position);
0
disx
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 582
Записей в блоге: 1
20.01.2015, 15:54  [ТС] #5
Armagedo, красиво все,... думал про ето, но вопрос остается item.getMenuInfo(), что есть item и где его писать?

подчеркивает его - item
0
Armagedo
209 / 209 / 60
Регистрация: 22.08.2014
Сообщений: 644
20.01.2015, 15:56 #6
Ну, у вас в коде он, item, только в одном метсе
0
disx
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 582
Записей в блоге: 1
20.01.2015, 16:18  [ТС] #7
Armagedo, тонко намекнули , сделал так:

Java
1
2
3
4
5
6
7
8
9
10
11
if (item.getItemId() == CM_EDIT_ID) {
            AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) item
                    .getMenuInfo();
            // 
            cursor.moveToPosition(acmi.position);
            // обновляем курсор
            //cursor.requery();
            showDialog(IDD_EDIT);
            
 
        }
ток он теперь если теперь в диалог-строку все правильно, нажимаешь отмена пробуешь на другой позиции, а он пишет все ту же?! Чего не доделал?
0
Armagedo
209 / 209 / 60
Регистрация: 22.08.2014
Сообщений: 644
20.01.2015, 16:50 #8
Неохота разбираться в вашем коде ибо showDialog уже давно того, тю-тю...

Но возможно после каждого использования диалога нужно removeDialog(int).
Или же обрабатывать событие onPrepareDialog(int, Dialog, Bundle)

http://developer.android.com/referen...oid.os.Bundle)
1
disx
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 582
Записей в блоге: 1
20.01.2015, 22:41  [ТС] #9
Armagedo, может оно и правильно, охоту должен я проявлять...

Спасибо тебе добрый человек, после недели переломов мозга и Вашей помощи оно заработало, вот по этой причине:
Java
1
2
3
4
5
6
@Override
    protected void onPrepareDialog(int id, Dialog dialog) {
        super.onPrepareDialog(id, dialog);
        
        removeDialog(id);       
    }
0
Armagedo
209 / 209 / 60
Регистрация: 22.08.2014
Сообщений: 644
20.01.2015, 22:49 #10
Лучший ответ Сообщение было отмечено disx как решение

Решение

Цитата Сообщение от disx Посмотреть сообщение
Armagedo, может оно и правильно, охоту должен я проявлять...
Посыл был немного другой и акцентирован вводным "ибо".
Вы используете инструмент, который официально рекомендовано более не использовать.
Зачем запрягать полудохлую лошадь?
Разберитесь с DialogFragment - ничего сложного, по сути тот же Activity

P.S. Зачем вы поместили removeDialog(id) в событие onPrepareDialog для меня сё же загадка
1
disx
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 582
Записей в блоге: 1
21.01.2015, 09:54  [ТС] #11
Armagedo Ok ,буду разбираться...


З.Ы.
Зачем вы поместили removeDialog(id) в событие onPrepareDialog для меня сё же загадка
,...

так и для меня не все так четко , но если закоментить, то вовращаемся к "Вчера, 16:18", ну т.е. не работет.
0
disx
23 / 23 / 0
Регистрация: 26.02.2014
Сообщений: 582
Записей в блоге: 1
27.01.2015, 22:57  [ТС] #12
Убрал removeDialog(id);

Все заработало!!!
0
27.01.2015, 22:57
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2015, 22:57

TextView а AlertDialog
Здравствуйте! Вот столкнулся с такой проблемой, не могу Textview вывести в...

AlertDialog Error
Всем доброго времени суток! Изучал изготовление своего AlertDialog по учебнику...

Не показывается AlertDialog
Хочу при запуске проверить есть ли на устройстве Сервисы Google Play public...


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

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

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