2012-01-03 5 views
2

Прежде всего, привет народ, и извините за мой плохой английский, я Brazillian! Я учился здесь в StackOverflow из вопросов других пользователей с тех пор, как я начал работать в Android; но теперь настала моя очередь спросить ...Android SDK - какой ListItem вызвал контекстное меню?

Я сделал звуковое сопровождение из учебника, но решил реализовать новую функцию: Установить как мелодию звонка/уведомление. Я уверен, что у меня не возникнет проблем с установкой ogg-файла в качестве мелодии звонка, потому что я только что увидел ответ об этом здесь. Мой вопрос: как получить идентификатор списка, называемого контекстным меню?

Посмотрите на моем коде (в португальской токе/notificação означает рингтон/уведомление):

registerForContextMenu(findViewById(android.R.id.list)); 
... 
    @Override 
    public void onCreateContextMenu(ContextMenu menuc, View v,ContextMenuInfo menuInfo) { 
     super.onCreateContextMenu(menuc, v, menuInfo); 
     menuc.setHeaderTitle("Usar como"); 
     menuc.add(Menu.NONE, 0, Menu.NONE, "Toque"); 
     menuc.add(Menu.NONE, 1, Menu.NONE,"Notificação"); 
    } 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 
     if (item.getTitle() == "Toque") { toque(0,item.getItemId()); } 
     else if(item.getTitle() == "Notificação") { notificacao(0,item.getItemId()); } 
     else { return false; } 
     return true; 
    } 

    public void toque(int position,int id){ 
     Sound s = (Sound) mSounds.get(position); 
     Toast.makeText(this, s.getSoundResourceId(), Toast.LENGTH_SHORT).show(); 
    } 

    public void notificacao(int position,int id){ 
     Sound s = (Sound) mSounds.get(position); 
     Toast.makeText(this, s.getSoundResourceId(), Toast.LENGTH_SHORT).show(); 
    } 

Итак, как вы можете видеть, что я сделал тост, чтобы проверить параметры. Теперь я могу получить res/raw/example.ogg по номеру «0», но хочу динамически получить идентификатор ListView, чтобы я мог передать его как целое «положение» ...

Пример:

@Override 
public boolean onContextItemSelected(MenuItem item) { 
    if (item.getTitle() == "Toque") { toque(GET.LISTITEM.ID, item.getItemId()); } 
    else if (item.getTitle() == "Notificação"){ notificacao(GET.LISTITEM.ID, item.getItemId()); } 
    else { return false; } 
    return true; 
} 

Я не знаю, был ли я достаточно ясен, или если это возможно, но я уверен, что буду счастлив, если найду способ сделать это.

Заранее спасибо, Лукас.

ответ

1

Предполагая, что вы используете обычное окно списка AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();

info.id получат Вас позицию.

Таким образом, вы можете позвонить notificacao(info.id,item.getItemId())

+0

Большое вам спасибо! Это работает как шарм, но затмение меня исправило: call (int) info.id, item.getItemId() –

+0

теперь у меня возникли проблемы с установкой в ​​качестве мелодии звонка LOL. Просто то, что я, хотя это было бы легко, так как у меня есть текст «res/raw/example.ogg». Я пытался адаптировать код, который я нашел здесь, без успеха ... Можете ли вы мне помочь? –

+0

Я думаю, что невозможно установить частный ресурс вашего приложения в качестве мелодии звонка. Вам нужен звук, который находится в файловой системе. – nandeesh

1

Вместо этого, если вы хотите реализовать твиттер как Quick значок действия (да это было доступно в старом твиттере, проверьте ниже изображения), я хотел бы предложить вам реализовать Quick Action bar.

Подробнее о Quick Action design pattern.

enter image description here

+0

Спасибо, но я начинаю так, что это немного сложнее = \ –

+1

@ user1127100 уже есть готовые вещи, доступные для скачивания. –