【发布时间】:2016-10-06 00:41:29
【问题描述】:
我有一个带菜单的 NavigationView。 当任何菜单项被长按时,我会弹出一个弹出窗口,为用户提供各种选项/按钮。每个按钮都有一个事件处理程序。
我需要这些处理程序知道最初触发弹出窗口的是哪个菜单项。
我缺少的是如何在对象流中传递该身份的知识。
在发布的代码中,菜单项被长按,我将菜单项作为视图传递给弹出构造函数。 但是不知道如何将它传递给弹出按钮的事件处理程序。
我正在考虑作为替代方案,只需在长按发生时使用 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);
}
【问题讨论】: