我有一些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来说这是不可能的,我还可以使用其他东西吗?
答案 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;
}