Java Android-GridView中的按钮持续单击
对于Java Android-GridView中的按钮持续单击,java,android,android-studio,gridview,Java,Android,Android Studio,Gridview,对于GridView项中的按钮,我有一个问题需要处理onClickListener。我按一下按钮。但是,在执行一次onClick函数后,会在一段时间内自动调用该函数。如何防止自动单击按钮?以下是我的适配器代码: @SuppressLint("ViewHolder") @Override public View getView(final int position, View convertView, ViewGroup parent) { LayoutInflater inflater
GridView
项中的按钮,我有一个问题需要处理onClickListener
。我按一下按钮。但是,在执行一次onClick
函数后,会在一段时间内自动调用该函数。如何防止自动单击按钮?以下是我的适配器代码:
@SuppressLint("ViewHolder")
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
assert inflater != null;
convertView = inflater.inflate(R.layout.single_product,parent,false);
Button buy = convertView.findViewById(R.id.btn_buy);
buy.setOnClickListener(new View.OnClickListener() {
double price = Double.parseDouble(products.get(position).getProductPrice());
@Override
public void onClick(View v) {
ringProgressDialog = ProgressDialog.show(context,
"Getting Information ...", "Please wait...", true);
assert user != null;
final String userId = user.getUid();
database.child(userId).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ringProgressDialog.dismiss();
if (dataSnapshot.exists()) {
userInfo = dataSnapshot.getValue(User.class);
assert userInfo != null;
double coin = Double.parseDouble(userInfo.getUserCoin());
if (coin<price){
Toast.makeText(context, "Not enough Coin.", Toast.LENGTH_LONG).show();
} else {
coin -= Double.parseDouble(products.get(position).getProductPrice());
userInfo.setUserCoin(String.valueOf(coin));
database.child(userId).setValue(userInfo).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
Operation.ShowAlertDialogue(context);
} else {
Toast.makeText(context, "There was an error. Please try again.", Toast.LENGTH_LONG).show();
}
}
});
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
ringProgressDialog.dismiss();
Toast.makeText(context, "Something not right.", Toast.LENGTH_SHORT).show();
}
});
}
});
return convertView;
}
@suppressint(“视图持有者”)
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
断言充气器!=null;
convertView=充气机。充气(右布局。单产品,父产品,错误);
Button buy=convertView.findViewById(R.id.btn_buy);
buy.setOnClickListener(新视图.OnClickListener(){
double price=double.parseDouble(products.get(position.getProductPrice());
@凌驾
公共void onClick(视图v){
ringProgressDialog=ProgressDialog.show(上下文,
“正在获取信息…”,“请稍候…”,正确);
断言用户!=null;
最后一个字符串userId=user.getUid();
database.child(userId).addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
ringProgressDialog.Disclose();
if(dataSnapshot.exists()){
userInfo=dataSnapshot.getValue(User.class);
断言userInfo!=null;
double coin=double.parseDouble(userInfo.getUserCoin());
如果(coinYes,这就是您在buy
按钮上执行onClick
编码的确切行为。您已经在Firebase数据库的特定用户id节点上添加了addValueEventListener
,然后您正在设置database.child(userId).setValue(userInfo)
再次在onDataChange
方法内。这将触发再次调用addValueEventListener
,因为这是此被重写函数的确切行为。addValueEventListener
将位于您保存引用的确切节点上的Firebase数据库中
为了解决这个问题,我建议你使用<代码> AddiistEngRealValueEngEnter()/代码>,而不是<代码> AdvaldEvEnviistListNo/Cuth>,这将被调用一次,用于从FialBasic数据库获取值。
我认为这将解决您的问题。谢谢@Reaz它解决了问题。非常感谢您的帮助。很高兴知道我能提供帮助。很高兴在Stackoverflow看到来自孟加拉国的开发人员。欢迎您。:)