2013-05-15 2 views
0

У меня есть несколько объектов GridView, таких как «battlegrid» и «handfield», которые создаются в моем PlayGameAcvitity (они являются частями макета, отображаемого во время PlayGameActivity). Сетки сетки динамически заполняются кнопками из пользовательского адаптера, который я написал. Я хотел бы иметь AlertDialog с несколькими вариантами (форма списка от here), если кнопки долго нажаты. Я не уверен, как это сделать, поскольку все примеры, которые я видел, были реализованы в классе активности. Однако мои кнопки LongClickListeners для кнопок находятся внутри кода адаптера.Как написать AlertDialog для кнопок, динамически генерируемых в GridView?

Вот часть кода адаптера в battlegrid GridView в:

public View getView(int position, View convertView, ViewGroup parent) 
{ 
    Button btn; 
    . 
    . 
    . 
    btn.setLongClickable(true); //enable long press 
    btn.setOnLongClickListener(new OnLongClickListener() 
    { 
     @Override 
     public boolean onLongClick(View v) 
     { 
      //TODO: make alertdialog appear and do stuff with what was selected 
      return true; 
     } 
    }); 
    . 
    . 
    . 
    return btn; 
} 

Код для адаптера «handfield» 's и другие аналогично. Мне нужно открыть AlertDialog со списком опций здесь и реализовать то, что происходит в зависимости от того, что выбрано. AlertDialog, который появляется для кнопки с длинным нажатием в «battlegrid», должен отличаться от того, который появляется для кнопки, нажатой в «handfield». Есть ли способ сделать это? Если это невозможно для AlertDialogs, есть ли что-то еще, что я могу использовать?

ответ

0

Вы можете определить прослушиватель и отправить его на свой адаптер. когда вы переопределяете onLongClick из btn в getView, вызывают метод Listener. и реализовать этот метод в вашей деятельности. поэтому вы можете вызвать AlertDialog. посмотрите на это:

в деятельности:

private YourListener listener = new YourListener() { 
    @Override 
    public void onListLongClick(long id, GridType type) { 
     // bring up an AlertDialog according to GridType 
    } 
} 

вы должны определить интерфейс YourListener до этого. и отправьте это слушателю переменной на ваш адаптер.

и адаптером вызова, который:

public View getView(int position, View convertView, ViewGroup parent) 
{ 
    Button btn; 
    . 
    . 
    . 
    btn.setLongClickable(true); //enable long press 
    btn.setOnLongClickListener(new OnLongClickListener() 
    { 
     @Override 
     public boolean onLongClick(View v) 
     { 
      listener.onListLongClick(getItemId(), GridType.battlegrid); 
      return true; 
     } 
    }); 
    . 
    . 
    . 
    return btn; 
} 
Смежные вопросы