0

我有一些 GridView 对象,例如在 PlayGameAcvitity 中实例化的“battlegrid”和“handfield”(它们是 PlayGameActivity 期间显示的布局的一部分)。网格视图由我编写的自定义适配器中的按钮动态填充。我希望在长按按钮时出现一个带有多个选项的 AlertDialog(来自此处的列表形式)。我不知道如何去做,因为我看到的所有例子都是在一个活动类中实现的。但是,我的 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”中长按按钮出现的不同。有没有办法做到这一点?如果这对于 AlertDialogs 来说是不可能的,我还可以使用其他东西吗?

4

1 回答 1

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;
}
于 2013-05-15T04:51:40.673 回答