Android弹出窗口显示弹出两次



我正试图使用PopupWindow类在点击按钮时创建一个弹出窗口,代码有效,但当我触摸按钮一次时,弹出窗口会出现2次

我曾尝试使用计数器变量来限制弹出窗口的数量,并在调用popup.dismiss函数时重置它,但在第一个弹出窗口被驳回后,第二个弹出窗口出现了

装置-一加3t(A3003(安卓版本-9.0

Visit_details.java

protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_visit_details);
DatabaseReference custRef, visitRef, order_dateRef, statusRef;
Button update_status = findViewById(R.id.btn_update_status);
private PopupWindow status_popup;
RelativeLayout mRelativeLayout;
statusRef = visitRef.child("status");
update_status.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(final View v)
{
statusRef.addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
{
String old_status = dataSnapshot.getValue(String.class);
LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(LAYOUT_INFLATER_SERVICE);
View customView = inflater.inflate(R.layout.update_status_popup, null);
status_popup = new PopupWindow(getApplicationContext());
status_popup.setContentView(customView);
status_popup.setHeight(LayoutParams.WRAP_CONTENT);
status_popup.setWidth(LayoutParams.MATCH_PARENT);
status_popup.setOutsideTouchable(true);
status_popup.setAnimationStyle(R.style.Animation);
status_popup.setFocusable(true);
RadioButton live = customView.findViewById(R.id.rb_live_pop);
RadioButton lost = customView.findViewById(R.id.rb_lost_pop);
RadioButton closed = customView.findViewById(R.id.rb_closed_pop);
status_popup.showAtLocation(mRelativeLayout, Gravity.CENTER, 0, 0);
statuspopup_count++;
if (old_status.equals("live"))
{
live.setChecked(true);
} else if (old_status.equals("lost"))
{
lost.setChecked(true);
} else if (old_status.equals("closed"))
{
closed.setChecked(true);
}
live.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
new_status = "live";
status_popup.dismiss();
}
});
lost.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
new_status = "lost";
status_popup.dismiss();
}
});
closed.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
new_status = "closed";
status_popup.dismiss();
}
});
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError)
{
}
});
}
});
}

通过将addEventValueListener从按钮的onclick监听器中移出来修复此问题感谢@MervinHemaraju指出

最新更新