如何为在GridView中动态生成的按钮编写AlertDialog?

时间:2013-05-15 04:04:55

标签: android gridview android-alertdialog android-button

我有一些GridView对象,比如在我的PlayGameAcvitity中实例化的“battlegrid”和“handfield”(它们是PlayGameActivity期间显示的布局的一部分)。使用我编写的自定义适配器中的按钮动态填充网格视图。我希望有一个AlertDialog,当按钮被长按时,会出现几个选项(来自here的列表形式)。我不知道该如何去做,因为我看过的所有例子都是在一个活动类中实现的。但是,我的按钮的LongClickListeners位于适配器代码中。

以下是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”的适配器代码和其他代码类似。我需要能够在这里显示一个带有选项列表的AlertDialog,并根据所选内容实现所发生的事情。对于在“battlegrid”中长按的按钮显示的AlertDialog需要与在“handfield”中长按的按钮显示的AlertDialog不同。有没有办法做到这一点?如果对于AlertDialogs来说这是不可能的,我还可以使用其他东西吗?

1 个答案:

答案 0 :(得分:0)

您可以定义侦听器并将其发送到适配器。当你在getView中覆盖btn的 onLongClick 时,调用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;
}