Android弹出窗口 - 将参数传递给事件处理程序

时间:2016-10-06 00:41:30

标签: android popup

我有一个带菜单的NavigationView。 当长按任何菜单项时,我会弹出一个弹出窗口,为用户提供各种选项/按钮。每个按钮都有一个事件处理程序。

我需要那些处理程序才能知道哪个menuitem最初触发了弹出窗口。

我缺少的是如何沿着对象流传递该身份的知识。

在发布的代码中,菜单项是longclicked,我将menutem作为视图传递给弹出构造函数。 但是不知道如何将它传递给弹出式Button的事件处理程序。

我正在考虑作为替代方案,只需在longpress发生时设置带有id的变量,然后在最终处理程序中再次读取该变量....但这确实感觉像是作弊而需要管理以确保与事件同步。

@Override
    public boolean onLongClick(View v) {
        pop(v);
        return true;
    }


public void pop(View v){

LayoutInflater layoutInflater =
  (LayoutInflater)getBaseContext()
    .getSystemService(LAYOUT_INFLATER_SERVICE);  

View popupView = layoutInflater.inflate(R.layout.popup, null);  

final PopupWindow popupWindow = new PopupWindow(
    popupView, 
    LayoutParams.WRAP_CONTENT,  
    LayoutParams.WRAP_CONTENT);  

    Button btnDismiss = (Button)popupView.findViewById(R.id.dismiss);

    btnDismiss.setOnClickListener(new Button.OnClickListener(){
        @Override
        public void onClick(View vw) {
            Toast.makeText(getApplicationContext(), "id of menuitem here", Toast.LENGTH_SHORT).show();
            popupWindow.dismiss();
        }
    });

popupWindow.showAsDropDown(v, 50, -30);
}

1 个答案:

答案 0 :(得分:0)

如果我的问题是正确的,你只需要将menuitem的id传递给pop方法,然后在Toast中显示该值。 在这种情况下,考虑到您可以将id值转换为字符串,您可以使用setTag()getTag()

@Override
public boolean onLongClick(View v) 
{
    v.setTag(place the id of menuitem tapped here);
        pop(v);
        return true;
}


public void pop(View v)
{

LayoutInflater layoutInflater =
  (LayoutInflater)getBaseContext()
    .getSystemService(LAYOUT_INFLATER_SERVICE);  

View popupView = layoutInflater.inflate(R.layout.popup, null);  

final PopupWindow popupWindow = new PopupWindow(
    popupView, 
    LayoutParams.WRAP_CONTENT,  
    LayoutParams.WRAP_CONTENT);  

    Button btnDismiss = (Button)popupView.findViewById(R.id.dismiss);

    btnDismiss.setOnClickListener(new Button.OnClickListener(){
        @Override
        public void onClick(View vw) {
            Toast.makeText(getApplicationContext(), String.valueOf(v.getTag()), Toast.LENGTH_SHORT).show();
            popupWindow.dismiss();
        }
    });

popupWindow.showAsDropDown(v, 50, -30);
}