Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 479
#1

ListView+onCreateContextMenu->AlertDialog - Android

20.01.2015, 13:33. Просмотров 525. Ответов 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 (и неважно кликнув на каком я вызвал контекстное меню).
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2015, 13:33     ListView+onCreateContextMenu->AlertDialog
Посмотрите здесь:

Android AlertDialog Error
Android Не показывается AlertDialog
Потоки и AlertDialog Android
Custom AlertDialog Android
AlertDialog Android
Android ListView+onCreateContextMenu->AlertDialog->dbSQLite
Android TextView а AlertDialog
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
20.01.2015, 14:28     ListView+onCreateContextMenu->AlertDialog #2
Java
1
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo()
+
http://developer.android.com/referen...tMenuInfo.html

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

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

подчеркивает его - item
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
20.01.2015, 15:56     ListView+onCreateContextMenu->AlertDialog #6
Ну, у вас в коде он, item, только в одном метсе
disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 479
20.01.2015, 16:18  [ТС]     ListView+onCreateContextMenu->AlertDialog #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);
            
 
        }
ток он теперь если теперь в диалог-строку все правильно, нажимаешь отмена пробуешь на другой позиции, а он пишет все ту же?! Чего не доделал?
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
20.01.2015, 16:50     ListView+onCreateContextMenu->AlertDialog #8
Неохота разбираться в вашем коде ибо showDialog уже давно того, тю-тю...

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

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

Спасибо тебе добрый человек, после недели переломов мозга и Вашей помощи оно заработало, вот по этой причине:
Java
1
2
3
4
5
6
@Override
    protected void onPrepareDialog(int id, Dialog dialog) {
        super.onPrepareDialog(id, dialog);
        
        removeDialog(id);       
    }
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
20.01.2015, 22:49     ListView+onCreateContextMenu->AlertDialog #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от disx Посмотреть сообщение
Armagedo, может оно и правильно, охоту должен я проявлять...
Посыл был немного другой и акцентирован вводным "ибо".
Вы используете инструмент, который официально рекомендовано более не использовать.
Зачем запрягать полудохлую лошадь?
Разберитесь с DialogFragment - ничего сложного, по сути тот же Activity

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


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

так и для меня не все так четко , но если закоментить, то вовращаемся к "Вчера, 16:18", ну т.е. не работет.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2015, 22:57     ListView+onCreateContextMenu->AlertDialog
Еще ссылки по теме:

Не работает AlertDialog Android
Android Spinner в AlertDialog
Android AlertDialog и RadioGroup
Android AlertDialog вылезает за разметку
Android Создание AlertDialog со списком

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

Или воспользуйтесь поиском по форуму:
disx
18 / 18 / 0
Регистрация: 26.02.2014
Сообщений: 479
27.01.2015, 22:57  [ТС]     ListView+onCreateContextMenu->AlertDialog #12
Убрал removeDialog(id);

Все заработало!!!
Yandex
Объявления
27.01.2015, 22:57     ListView+onCreateContextMenu->AlertDialog
Ответ Создать тему
Опции темы

Текущее время: 18:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru